這次我們實現乙個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...