Server:
#include <stdio.h> #include <string.h> #include <arpa/inet.h> #include <netinet/in.h> #include <sys/socket.h> #define MAXSIZE 1024 #define SERV_PORT 2000 void dg_echo(int sockfd, struct sockaddr * pcliaddr, socklen_t clilen) { int n; socklen_t len; while(1) { char mesg[MAXSIZE]; //回射機制 len=clilen; n=recvfrom(sockfd,mesg,MAXSIZE,0,pcliaddr,&len); char servermsg[MAXSIZE]="From Server: "; int l = strlen(servermsg); servermsg[l]='/0'; strcat(servermsg,mesg); sendto(sockfd,servermsg,n+l,0,pcliaddr,len); } } int main( int args, char ** argv) { int sockfd; struct sockaddr_in serveraddr, clientaddr; sockfd=socket(AF_INET,SOCK_DGRAM,0); bzero(&serveraddr,sizeof(serveraddr)); serveraddr.sin_family=AF_INET; serveraddr.sin_addr.s_addr=htonl(INADDR_ANY); serveraddr.sin_port=htons(SERV_PORT); bind(sockfd,(struct sockaddr *)&serveraddr,sizeof(serveraddr)); dg_echo(sockfd,(struct sockaddr *)&serveraddr,sizeof(clientaddr)); return 0; }
Client:
#include <stdio.h> #include <string.h> #include <arpa/inet.h> #include <netinet/in.h> #include <sys/socket.h> #define MAXSIZE 1024 #define SERVER_PORT 2000 void dg_client (FILE* fp,int sockfd, const struct sockaddr * pservaddr,socklen_t serverlen) { int n; char sendline[MAXSIZE],recvline[MAXSIZE+1]; printf("From Client: "); while(fgets(sendline,MAXSIZE,fp)!=NULL) { sendto(sockfd,sendline,strlen(sendline),0,pservaddr,serverlen); n=recvfrom(sockfd,recvline,MAXSIZE,0,NULL,NULL); recvline[n]='/0'; fputs(recvline,stdout); printf("From Client: "); } } int main (int args, char ** argv ) { int sockfd; struct sockaddr_in serveraddr; bzero(&serveraddr,sizeof(serveraddr)); serveraddr.sin_family=AF_INET; serveraddr.sin_port=htons(SERVER_PORT); inet_pton(AF_INET,"10.3.1.215",&serveraddr.sin_addr); sockfd=socket(AF_INET,SOCK_DGRAM,0); dg_client(stdin,sockfd,(struct sockaddr * )&serveraddr,sizeof(serveraddr)); return 0; }