C 回聲伺服器 1 簡單版本

2021-09-12 18:03:51 字數 2451 閱讀 6027

c++網路程式設計離不開socket程式設計。我們現在使用socket編寫簡單的回聲伺服器。

這裡所說的流程包括兩部分:

socket函式呼叫流程。

伺服器與客戶端互動流程。

回聲伺服器主要功能:伺服器將接收到來自客戶端的資料傳回客戶端。

伺服器的功能:

客戶端的功能:

#include #include #include #include #include #include const int buf_size = 1024;

void error_handling(const char *message);

// 接收兩個引數,ar**[1]為埠號

int main(int argc, char *ar**)

server_socket = socket(pf_inet, sock_stream, 0); // 建立ipv4 tcp socket

if (server_socket == -1)

// 位址資訊初始化

memset(&server_addr, 0, sizeof(server_addr));

server_addr.sin_family = af_inet; // ipv4 位址族

server_addr.sin_addr.s_addr = htonl(inaddr_any); // 使用inaddr_any分配伺服器的ip位址

server_addr.sin_port = htons(atoi(ar**[1])); // 埠號由第乙個引數設定

// 分配位址資訊

if (bind(server_socket, (struct sockaddr*)&server_addr, sizeof(sockaddr)) == -1)

// 監聽連線請求,最大同時連線數為5

if (listen(server_socket, 5) == -1)

client_addr_size = sizeof(client_addr);

for (i = 0; i < 5; ++i) else

// 讀取來自客戶端的資料

while ((str_len = read(client_sock, message, buf_size)) != 0)

}// 關閉連線

close(client_sock);

printf("echo server\n");

return 0;

}

#include #include #include #include #include #include const int buf_size = 1024;

void error_handling(const char *message);

// 接收兩個引數,ar**[1]為ip位址,ar**[2]為埠號

int main(int argc, char *ar**)

sock = socket(pf_inet, sock_stream, 0);

if (sock == -1)

// 位址資訊初始化

memset(&server_addr, 0, sizeof(server_addr));

server_addr.sin_family = af_inet; // ipv4 位址族

server_addr.sin_addr.s_addr = inet_addr(ar**[1]); // 伺服器ip位址

server_addr.sin_port = htons(atoi(ar**[2])); // 伺服器端口號

// 向伺服器傳送連線請求

if (connect(sock, (struct sockaddr*)&server_addr, sizeof(server_addr)) == -1) else

while (1)

write(sock, message, strlen(message)); // 向伺服器傳送資料

str_len = read(sock, message, buf_size); // 讀取來自客戶端的伺服器

message[str_len] = 0;

printf("message from server: %s \n", message);

}// 關閉連線

close(sock);

return 0;

}

客戶端傳輸資料,通過呼叫write函式一次性傳送,之後呼叫一次read函式,期望接收自己傳輸的資料。只是問題所在。因為「tcp不存在資料邊界」,存在兩個異常情況:

客戶端多次呼叫write函式傳輸的資料有可能一次性傳送給伺服器。

伺服器呼叫一次write函式傳輸資料,但資料太大,作業系統有可能把資料分成多個資料報傳送到客戶端。另外,在此過程中,客戶端有可能在尚未收到全部資料報時就呼叫了read函式。

github

《tcp/ip網路程式設計》

C 回聲伺服器 1 簡單版本

c 網路程式設計離不開socket程式設計。我們現在使用socket編寫簡單的回聲伺服器。這裡所說的流程包括兩部分 socket函式呼叫流程。伺服器與客戶端互動流程。回聲伺服器主要功能 伺服器將接收到來自客戶端的資料傳回客戶端。伺服器的功能 客戶端的功能 include include includ...

C 回聲伺服器 1 簡單版本

c 網路程式設計離不開socket程式設計。我們現在使用socket編寫簡單的回聲伺服器。這裡所說的流程包括兩部分 socket函式呼叫流程。伺服器與客戶端互動流程。回聲伺服器主要功能 伺服器將接收到來自客戶端的資料傳回客戶端。伺服器的功能 客戶端的功能 include include includ...

C 回聲伺服器 3 UDP版本

這次我們實現乙個udp版本的回聲伺服器。udp套接字不會像tcp套接字那樣保持連線狀態,因此每次傳輸資料都要新增目標位址資訊。用於傳輸資料的函式 傳送資料到目標伺服器。include ssize t sendto int sock,void buff,size t nbytes,int flags,...