/*server.c*/
#include <stdlib.h>#include <stdio.h>#include <errno.h>#include <string.h>#include <unistd.h>#include <netdb.h>#include <sys/socket.h>#include <netinet/in.h>#include <sys/types.h>#include <arpa/inet.h>
#define SERVER_PORT 8888 #define MAX_MSG_SIZE 1024
void udps_respon(int sockfd) { int addrlen,n; struct sockaddr_in client; char msg[MAX_MSG_SIZE]; char buffer[MAX_MSG_SIZE]; int len; len=sizeof(struct sockaddr_in); while(1) { /* 浠庣綉缁滀笂璇?骞跺啓鍒扮綉缁滀笂 */ bzero(msg,sizeof(msg)); // 鍒濆鍖?娓呴浂
addrlen = sizeof(struct sockaddr); printf("h1_1/n"); n=recvfrom(sockfd,msg,sizeof(msg),0,(struct sockaddr *)&client,&addrlen); // 浠庡鎴风鎺ユ敹娑堟伅 msg[n]='/0'; printf("h1_2/n"); /* 鏄剧ず鏈嶅姟绔凡缁忔敹鍒颁簡淇℃伅 */ fprintf(stdout,"Server have received %s",msg); // 鏄剧ず娑堟伅 /* 浠庨敭鐩樿鍏?鍐欏埌鏈嶅姟绔?*/ bzero(buffer,MAX_MSG_SIZE); printf("Please input char:"); fgets(buffer,sizeof(buffer),stdin); sendto(sockfd,buffer,sizeof(buffer),0,(struct sockaddr *)&client,len); } }
int main(){ int sockfd; struct sockaddr_in addr;
/* 鏈嶅姟鍣ㄧ寮€濮嬪缓绔媠ocket鎻忚堪绗?*/ sockfd=socket(AF_INET,SOCK_DGRAM,0); if(sockfd<0) { fprintf(stderr,"Socket Error:%s/n",strerror(errno)); exit(1); }
/* 鏈嶅姟鍣ㄧ濉厖 sockaddr缁撴瀯 */ bzero(&addr,sizeof(struct sockaddr_in)); addr.sin_family=AF_INET; addr.sin_addr.s_addr=htonl(INADDR_ANY); addr.sin_port=htons(SERVER_PORT);
/* 鎹嗙粦sockfd鎻忚堪绗?*/ if(bind(sockfd,(struct sockaddr *)&addr,sizeof(struct sockaddr_in))<0) { fprintf(stderr,"Bind Error:%s/n",strerror(errno)); exit(1); }
udps_respon(sockfd); // 杩涜璇诲啓鎿嶄綔 close(sockfd);}
/*client*/
#include <stdlib.h>#include <stdio.h>#include <errno.h>#include <string.h>#include <unistd.h>#include <netdb.h>#include <sys/socket.h>#include <netinet/in.h>#include <sys/types.h>#include <arpa/inet.h>
#define SERVER_PORT 8888 #define MAX_BUF_SIZE 1024
void udpc_requ(int sockfd1, struct sockaddr_in addr1,int len) { char buffer[10240]; char msg[1024]; int addrlen; int n; int nd; while(1) { /* 浠庨敭鐩樿鍏?鍐欏埌鏈嶅姟绔?*/ bzero(buffer,MAX_BUF_SIZE); printf("Please input char:"); scanf("%s",buffer); nd=sendto(sockfd1,buffer,sizeof(buffer),0,(struct sockaddr *)&addr1,len); printf("h2=%d/n",nd); bzero(msg,sizeof(msg)); // 鍒濆鍖?娓呴浂 addrlen = sizeof(struct sockaddr); n=recvfrom(sockfd1,msg,MAX_BUF_SIZE,0,(struct sockaddr *)&addr1,&addrlen); // 浠庡鎴风鎺ユ敹娑堟伅 //msg[n]='/0'; fprintf(stdout,"CLIENT have received %s",msg); // 鏄剧ず娑堟伅 } }
int main(int argc,char **argv){ int sockfd; struct sockaddr_in addr;
if(argc!=2) { fprintf(stderr,"Usage:%s server_ip/n",argv[0]); exit(1); }
/* 寤虹珛 sockfd鎻忚堪绗?*/ sockfd=socket(AF_INET,SOCK_DGRAM,0); if(sockfd<0) { fprintf(stderr,"Socket Error:%s/n",strerror(errno)); exit(1); } /* 濉厖鏈嶅姟绔殑璧勬枡 */ bzero(&addr,sizeof(struct sockaddr_in)); addr.sin_family=AF_INET; addr.sin_port=htons(SERVER_PORT); if(inet_aton(argv[1],&addr.sin_addr)<0) /*inet_aton鍑芥暟鐢ㄤ簬鎶婂瓧绗︿覆鍨嬬殑IP鍦板潃杞寲鎴愮綉缁?杩涘埗鏁板瓧*/ { fprintf(stderr,"Ip error:%s/n",strerror(errno)); exit(1); }
udpc_requ(sockfd,addr,sizeof(struct sockaddr_in)); // 杩涜璇诲啓鎿嶄綔 close(sockfd); }