TCPClient
1 /*TCP/IP应用编程接口(API)*/ 2 /* 3 *客户端的工作流程:首先调用socket函数创建一个Socket,然后调用bind函数 4 *将其与本机地址以及一个本地端口号绑定,请求连接服务器,通过新的socket 5 *向客户端发送字符串" hi,I am client!"。最后关闭该socket。 6 */ 7 #include8 #include 9 #include 10 #include 11 #include 12 #include 13 #include 14 15 int main() 16 { 17 int cli_sockfd;/*客户端SOCKET */ 18 int addrlen; 19 char seraddr[14]; 20 struct sockaddr_in ser_addr,/* 服务器的地址*/ 21 cli_addr;/* 客户端的地址*/ 22 char msg[MAX_MSG_SIZE];/* 缓冲区*/ 23 GetServerAddr(seraddr); 24 cli_sockfd=socket(AF_INET,SOCK_STREAM,0);/*创建连接的SOCKET */ 25 if(ser_sockfd<0) 26 { /*创建失败 */ 27 fprintf(stderr,"socker Error:%s\n",strerror(errno)); 28 exit(1); 29 } 30 /* 初始化客户端地址*/ 31 addrlen=sizeof(struct sockaddr_in); 32 bzero(&ser_addr,addrlen); 33 cli_addr.sin_family=AF_INET; 34 cli_addr.sin_addr.s_addr=htonl(INADDR_ANY); 35 cli_addr.sin_port=0; 36 if(bind(cli_sockfd,(struct sockaddr*)&cli_addr,addrlen)<0) 37 { 38 /*棒定失败 */ 39 fprintf(stderr,"Bind Error:%s\n",strerror(errno)); 40 exit(1); 41 } 42 /* 初始化服务器地址*/ 43 addrlen=sizeof(struct sockaddr_in); 44 bzero(&ser_addr,addrlen); 45 ser_addr.sin_family=AF_INET; 46 ser_addr.sin_addr.s_addr=inet_addr(seraddr); 47 ser_addr.sin_port=htons(SERVER_PORT); 48 if(connect(cli_sockfd,(struct sockaddr*)&ser_addr,&addrlen)!=0)/*请求连接*/ 49 { 50 /*连接失败 */ 51 fprintf(stderr,"Connect Error:%s\n",strerror(errno)); 52 close(cli_sockfd); 53 exit(1); 54 } 55 strcpy(msg,"hi,I am client!"); 56 send(sockfd,msg,sizeof(msg),0);/*发送数据*/ 57 recv(sockfd,msg,MAX_MSG_SIZE,0); /* 接受数据*/ 58 printf("%s\n",msg);/*在屏幕上打印出来 */ 59 close(cli_sockfd); 60 61 return 0; 62 }
TCPServer
/*TCP/IP应用编程接口(API)*/ /* *服务器的工作流程:首先调用socket函数创建一个Socket,然后调用bind函数将其与本机地址以及 *一个本地端口号绑定,然后调用listen在相应的socket上*,当accpet接收到一个连接服务请求时, *将生成一个新的socket。服务器显示该客户机的IP地址,并通过新的socket向客户端发送字符串 *" hi,I am SERver!"。最后关闭该socket。 */ #include#include #include #include #include #include #include int main() { int sock_fd,client_fd; /*sock_fd:*socket;client_fd:数据传输socket */ struct sockaddr_in ser_addr; /* 本机地址信息 */ struct sockaddr_in cli_addr; /* 客户端地址信息 */ char msg[MAX_MSG_SIZE];/* 缓冲区*/ ser_sockfd=socket(AF_INET,SOCK_STREAM,0);/*创建连接的SOCKET */ if(ser_sockfd<0) { /*创建失败 */ fprintf(stderr,"socker Error:%s\n",strerror(errno)); exit(1); } /* 初始化服务器地址*/ addrlen=sizeof(struct sockaddr_in); bzero(&ser_addr,addrlen); ser_addr.sin_family=AF_INET; ser_addr.sin_addr.s_addr=htonl(INADDR_ANY); ser_addr.sin_port=htons(SERVER_PORT); if(bind(ser_sockfd,(struct sockaddr*)&ser_addr,sizeof(struct sockaddr_in))<0) { /*绑定失败 */ fprintf(stderr,"Bind Error:%s\n",strerror(errno)); exit(1); } /*侦听客户端请求*/ if(listen(ser_sockfd,BACKLOG)<0) { fprintf(stderr,"Listen Error:%s\n",strerror(errno)); close(ser_sockfd); exit(1); } while(1) { /* 等待接收客户连接请求*/ cli_sockfd=accept(ser_sockfd,(struct sockaddr*) & cli_addr,&addrlen); if(cli_sockfd<=0) { fprintf(stderr,"Accept Error:%s\n",strerror(errno)); } else { /*开始服务*/ recv(cli_addr,msg,MAX_MSG_SIZE,0); /* 接受数据*/ printf("received a connection from %sn", inet_ntoa(cli_addr.sin_addr)); printf("%s\n",msg);/*在屏幕上打印出来 */ strcpy(msg,"hi,I am server!"); send(cli_addr,msg,sizeof(msg),0); /*发送的数据*/ close(cli_addr); } } close(ser_sockfd); }