linux 下socket程式設計 一對一阻塞通訊

2021-07-01 23:11:37 字數 2298 閱讀 2738

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...