socket编程之udp客户服务器

来源:互联网 发布:婚礼做电子相册软件 编辑:程序博客网 时间:2024/06/04 23:55

实现基于udp的C/S服务模型,服务器将客户端的输入回显给客户端。

服务器:

#include<stdio.h>#include<stdlib.h>#include<sys/types.h>#include<sys/socket.h>#include<arpa/inet.h>//#include<netinet/in.h>#include<string.h>static void usage(const char * str){printf("Usage:%s [IP] [PORT]\n",str);}//  ./server 127.0.0.1 8080int 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 serv_addr;serv_addr.sin_family = AF_INET;serv_addr.sin_port = htons( atoi(argv[2]) );serv_addr.sin_addr.s_addr = inet_addr(argv[1]);if( (bind(sock,(struct sockaddr*)&serv_addr,sizeof(serv_addr)) ) < 0  ){perror("bind");return 3;}char buf[BUFSIZ]  ;struct sockaddr_in clie_addr;socklen_t len = sizeof(clie_addr);while(1){ssize_t s = recvfrom(sock,buf,sizeof(buf)-1,0,(struct sockaddr*)&clie_addr,&len );//最后一个参数是输入输出参数,if(s > 0){buf[s] = 0;  //最后加上一个\0printf("%s:%d say # %s\n",inet_ntoa(clie_addr.sin_addr),ntohs(clie_addr.sin_port),buf);sendto(sock,buf,strlen(buf),0,(struct sockaddr*)&clie_addr,sizeof(clie_addr));}}close(sock);return 0;}
客户端:

#include<stdio.h>#include<stdlib.h>#include<sys/types.h>#include<sys/socket.h>#include<arpa/inet.h>//#include<netinet/in.h>#include<string.h>static void usage(const char *str){printf("Usage:%s [IP] [PORT]\n",str);}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 serv_addr;serv_addr.sin_family = AF_INET;serv_addr.sin_port = htons(atoi(argv[2]));serv_addr.sin_addr.s_addr = inet_addr(argv[1]);char buf[BUFSIZ] = { 0 };socklen_t len = sizeof(serv_addr);while(1){printf("Please Enter# ");fflush(stdout);ssize_t s =  read(0,buf,sizeof(buf)-1);if(s > 0){buf[s - 1] = 0;  //去掉换行符。sendto(sock,buf,strlen(buf),0,(struct sockaddr*)&serv_addr,sizeof(serv_addr));ssize_t s2 = recvfrom(sock,buf,sizeof(buf)-1,0,NULL,NULL); //收到的肯定是服务器的,这里就不需要表示出来了。buf[s2] = 0;printf("server echo# %s\n",buf);}}close(sock);return 0;}

截图:

客户端:


服务器端:



原创粉丝点击