linux UDP 通信
UDP:
#include <sys/types.h> #include <sys/socket.h> ssize_t sendto(int sockfd, const void *buf, size_t len, int flags, const struct sockaddr *dest_addr, socklen_t addrlen); - 参数: - sockfd : 通信的fd - buf : 要发送的数据 - len : 发送数据的长度 - flag : 0 - dest_addr : 通信的另外一端的地址信息 - addrlen : 地址的内存大小 - 返回值: - 成功 : 数据大小(字节) - 失败 : -1 ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags, struct sockaddr *src_addr, socklen_t *addrlen); - 参数: - sockfd : 通信的fd - buf : 接收数据的数组 - len : 数组的大小 - flags : 0 - src_addr : 用来保存另外一端的地址信息, 不需要指定为 NULL - addrlen : 地址的内存大小 - 返回值: - 成功 : 数据大小(字节) - 失败 : -1

UDP客户端:
1 #include <stdio.h> 2 #include <arpa/inet.h> 3 #include <stdlib.h> 4 #include <unistd.h> 5 #include <string.h> 6 7 int main() 8 { 9 //创建socket 10 int fd = socket(PF_INET, SOCK_DGRAM, 0); 11 if(fd == -1) 12 { 13 perror("socket"); 14 return -1; 15 } 16 //服务器的地址信息 17 struct sockaddr_in saddr; 18 saddr.sin_family = AF_INET; 19 saddr.sin_port = htons(9999); 20 inet_pton(AF_INET, "127.0.0.1", &saddr.sin_addr.s_addr); 21 int num = 0; 22 //通信 23 while(1) 24 { 25 char sendbuf[128]; 26 sprintf(sendbuf, "hello, i am client %d\n",num++); 27 //发送数据 28 sendto(fd, sendbuf, strlen(sendbuf) + 1, 0, (struct sockaddr *)&saddr, sizeof(saddr)); 29 // 接收 30 int num = recvfrom(fd, sendbuf, sizeof(sendbuf), 0, NULL, NULL); 31 printf("server say: %s\n",sendbuf); 32 sleep(1); 33 } 34 close(fd); 35 return 0; 36 }
UDP服务器端:
1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <unistd.h> 4 #include <string.h> 5 #include <arpa/inet.h>// #include <sys/types.h> #include <sys/socket.h> 6 7 int main() 8 { 9 //1.创建一个通信socket 10 int fd = socket(PF_INET, SOCK_DGRAM, 0); 11 if(fd == -1) 12 { 13 perror("socket"); 14 exit(-1); 15 } 16 struct sockaddr_in addr; 17 addr.sin_family = AF_INET; 18 addr.sin_port = htons(9999); 19 addr.sin_addr.s_addr = INADDR_ANY; 20 //2.绑定 21 int ret = bind(fd, (struct sockaddr *)&addr, sizeof(addr)); 22 if(ret == -1) 23 { 24 perror("bind"); 25 exit(-1); 26 } 27 //3.通信 28 while(1) 29 { 30 char recvbuf[128]; 31 char ipbuf[16]; 32 struct sockaddr_in cliaddr; 33 int len = sizeof(cliaddr); 34 //接收数据 35 int num =recvfrom(fd, recvbuf, sizeof(recvbuf), 0, (struct sockaddr *)&cliaddr, &len); 36 if(num == -1) 37 { 38 perror("recvfrom"); 39 exit(-1); 40 } 41 printf("client IP : %s, Port: %d\n",inet_ntop(AF_INET, &cliaddr.sin_addr.s_addr,ipbuf, sizeof(ipbuf)),ntohs(cliaddr.sin_port)); 42 printf("client say : %s\n", recvbuf); 43 //发送数据 44 sendto(fd, recvbuf, strlen(recvbuf) + 1, 0, (struct sockaddr *)&cliaddr, sizeof(cliaddr)); 45 } 46 close(fd); 47 return 0; 48 }
浙公网安备 33010602011771号