C 回聲伺服器 3 UDP版本

2021-09-12 18:34:15 字數 2402 閱讀 2935

這次我們實現乙個udp版本的回聲伺服器。

udp套接字不會像tcp套接字那樣保持連線狀態,因此每次傳輸資料都要新增目標位址資訊。

用於傳輸資料的函式:

傳送資料到目標伺服器。

#include ssize_t sendto(int sock, void *buff, size_t nbytes, int flags, struct sockaddr *to, socklen_t addrlen);
​ 其中to為存有目標伺服器位址資訊的sockaddr結構體變數的位址值。

接收來自伺服器的資料。

#include ssize_t recvfrom(int sock, void *buff, size_t nbytes, int flags, struct sockaddr *from, socklen_t *addrlen);
​ 其中from為存有傳送端位址資訊的sockaddr結構體變數的位址值

#include #include #include #include #include #include const int buf_size = 30;

void error_handling(const char *message);

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

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

server_socket = socket(pf_inet, sock_dgram, 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)

while (1)

printf("echo server\n");

return 0;

}

注:while迴圈內沒有break語句,因此是無限迴圈,close函式不會執行。

#include #include #include #include #include #include const int buf_size = 30;

void error_handling(const char *message);

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

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

sock = socket(pf_inet, sock_dgram, 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])); // 伺服器端口號

while (1)

sendto(sock, message, strlen(message), 0, (struct sockaddr*)&server_addr, sizeof(sockaddr)); // 傳送資料到伺服器

addr_size = sizeof(from_addr);

str_len = recvfrom(sock, message, buf_size, 0, (struct sockaddr*)&from_addr, &addr_size); // 接收資料

message[str_len] = 0;

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

}close(sock);

return 0;

}

呼叫bind函式。

如果呼叫sendto函式是發現尚未分配位址資訊,則在首次呼叫sendto函式時給相應的套接字自動分配ip和埠。

github

《tcp/ip網路程式設計》

C 回聲伺服器 3 UDP版本

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

C 回聲伺服器 1 簡單版本

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

C 回聲伺服器 1 簡單版本

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