首先,编写udp_server.c,代码如下:
#include <stdio.h> #include <string.h> #include <sys/types.h> #include <sys/socket.h> #include <arpa/inet.h> #include <netinet/in.h> static void Usage(const char* proc) { printf("Usage:%s[local_ip][local_port]\n",proc); } int main(int argc, char* argv[]) { if(argc != 3) { Usage(argv[0]); return 1; } int sock = socket(AF_INET,SOCK_DGRAM,0); if(sock < 0) { perror("sock"); return(2); } struct sockaddr_in local; local.sin_family = AF_INET; local.sin_port = htons(atoi(argv[2])); local.sin_addr.s_addr = inet_addr(argv[1]); if(bind(sock,(struct sockaddr*)&local,sizeof(local))<0) { perror("bind"); return(3); } printf("bind success...\n"); char buf[1024]; while(1) { struct sockaddr_in client; socklen_t len = sizeof(client); ssize_t s = recvfrom(sock,buf,sizeof(buf)-1,0,(struct sockaddr*)&client, &len); if(s > 0) { buf[s] = '\0'; printf("client#:%s",buf); sendto(sock,buf,sizeof(buf)-1,0,(struct sockaddr*)&client,len); } else { close(sock); printf("client quit...\n"); break; } } close(sock); return 0; }然后,编写udp_client.c,代码如下:
#include <stdio.h> #include <string.h> #include <sys/types.h> #include <sys/socket.h> #include <arpa/inet.h> #include <netinet/in.h> static void Usage(const char* proc) { printf("Usage:%s[local_ip][local_port]\n",proc); } int main(int argc, char* argv[]) { if(argc != 3) { Usage(argv[0]); return 1; } int sock = socket(AF_INET,SOCK_DGRAM,0); if(sock < 0) { perror("sock"); return(2); } struct sockaddr_in server; server.sin_family = AF_INET; server.sin_port = htons(atoi(argv[2])); server.sin_addr.s_addr = inet_addr(argv[1]); socklen_t len = sizeof(server); char buf[1024]; while(1) { printf("server to ##"); fflush(stdout); ssize_t s = read(0, buf, sizeof(buf)-1); if(s > 0) { buf[s] = '\0'; sendto(sock,buf,sizeof(buf)-1,0,(struct sockaddr*)&server,len); } s = recvfrom(sock, buf, sizeof(buf)-1,0,(struct sockaddr *)&server,&len); if(s > 0) { printf("client echo$:%s",buf); } } close(sock); return 0; }运行结果,如下图所示: