linux下socket程式設計,socket的流程和windows幾乎一樣,只是linux下不需要載入socket版本號。
1.create socket。
函式:int server_socket = socket(af_inet, sock_stream, 0);
第乙個引數:通訊域 可選:af_inet是ipv4, af_inet6是ipv6
第二個引數: 通訊型別 可選:sock_stream(面向連線可靠tcp),sock_dgram(無連線不可靠udp)
第三個引數: 使用協議,和第二個引數對應,一般為0(依據第二個引數自動補充協議), ipproto_tcp(tcp), ipproto_udp(udp)
返回值為-1失敗,否則成功
2.bind socket
首先建立本地位址
struct sockaddr_in server_addr;
server_addr.sin_family = af_inet;
server_addr.sin_port = htons(12345);
server_addr.sin_addr.s_addr = inet_addr("127.0.0.1");
bzero(&(server_addr.sin_zero), 8); //補齊
int bind_result = bind(server_socket, (struct sockaddr *)&server_addr, sizeof(server_addr));
返回值為-1則失敗,否則成功
3.listen
listen(server_socket, 5) // 5為最多可以同時連線的客戶端
返回值-1失敗,否則成功
4.accept
struct sockaddr_in client_address;
socklen_t address_len;
int client_socket = accept(server_socket, (struct sockaddr *)&client_address, &address_len);
client_addres得到客戶端位址
返回值大於0成功,否則失敗
5.recv
recv(client_socket, recv_msg, buffer_size, 0);
返回值大於0,表示接受到的位元組長度;等於0,表示客戶端退出;小於0,表示接收訊息失敗(如網路不好)
6.send
send(client_socket, input_msg, buffer_size, 0);
伺服器端**:
#include#include#include#include#includeint main(int argc, const char * argv)
int bind_result = bind(server_socket, (struct sockaddr *)&server_addr, sizeof(server_addr));
if(bind_result == -1)
if(listen(server_socket, 5) == -1)
struct sockaddr_in client_address;
socklen_t address_len;
int client_socket = accept(server_socket, (struct sockaddr *)&client_address, &address_len);
if(client_socket == -1)
char recv_msg[1024];
char reply_msg[1024];
while(1)
return 0;
}
客戶端**:
#include #include #include #include #include int main (int argc, const char * argv)
char recv_msg[1024];
char reply_msg[1024];
if (connect(server_socket, (struct sockaddr *)&server_addr, sizeof(struct sockaddr_in))==0) }}
// insert code here...
printf("hello, world!\n");
return 0;
}
由於是阻塞的,只能一問一答的通訊。
linux下socket程式設計(一)
流式套接字 stream socket 是面向連線的套接字,採用tcp協議 中用sock stream表示,有幾大特徵 1 資料在傳輸過程中不會消失 2 資料是按順序傳送與到達 3 資料的傳送與接收不一定同步 解釋一下特徵3 客戶端和服務端都有乙個緩衝區,達到緩衝區的資料不一定被立即讀取,緩衝區滿了...
linux下socket程式設計
一 什麼是socket socket可以看成是使用者程序與核心網路協議棧的程式設計介面。socket不僅可以用於本機的程序間通訊,還可以用於網路上不同主機的程序間通訊。socket api是一層抽象的網路程式設計介面,適用於各種底層網路協議,如ipv4 ipv6。struct sockaddr in...
linux下socket程式設計
作為乙個嵌入式開發者,在實際的研發專案中,常常需要編寫socket網路程式設計介面,提供給軟體開發人員。下面將提供乙個常用的 模板 客戶端的功能可以用微控制器多功能除錯助手進行驗證 include include include include include include include def...