标签:
1 /*服务器端*/ 2 #include<stdlib.h> 3 #include<stdio.h> 4 #include<string.h> 5 #include<errno.h> 6 #include<netdb.h> 7 #include<sys/types.h> 8 #include<netinet/in.h> 9 #include<sys/socket.h> 10 #include<unistd.h> 11 12 #define MAXSIZE 1024 13 14 int main(int argc, char *argv[]) 15 { 16 int sockfd,new_fd; 17 struct sockaddr_in server_addr; 18 struct sockaddr_in client_addr; 19 int sin_size,portnumber; 20 char buf[MAXSIZE]; 21 if(argc!=2) 22 { 23 fprintf(stderr,"Usage :%s portnumber\a\n",argv[0]); 24 exit(1); 25 } 26 if((portnumber=atoi(argv[1]))<0) 27 { 28 fprintf(stderr,"Usage :%s protnumber\a\n",argv[0]); 29 exit(1); 30 } 31 if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1) 32 { 33 fprintf(stderr,"Socket error:%s\n\a",strerror(errno)); 34 exit(1); 35 } 36 37 bzero(&server_addr,sizeof(struct sockaddr_in)); 38 server_addr.sin_family=AF_INET; 39 server_addr.sin_addr.s_addr=htonl(INADDR_ANY); 40 server_addr.sin_port=htons(portnumber); 41 if(bind(sockfd,(struct sockaddr *)(&server_addr),sizeof(struct sockaddr))==-1) 42 { 43 fprintf(stderr,"Bind error:%s\n\a",strerror(errno)); 44 exit(1); 45 } 46 if(listen(sockfd,5)==-1) 47 { 48 fprintf(stderr,"Listen error:%s\n\a",strerror(errno)); 49 exit(1); 50 } 51 52 while(1) 53 { 54 sin_size=sizeof(struct sockaddr_in); 55 if((new_fd=accept(sockfd,(struct sockaddr *)(&client_addr),&sin_size))==-1) 56 { 57 fprintf(stderr,"Accept error:%s\n\a",strerror(errno)); 58 exit(1); 59 } 60 fprintf(stderr,"Server get connection from %d:\n",inet_ntoa(client_addr.sin_addr)); 61 printf("Connect successful,please input the message [<1024 bytes]:\n"); 62 if(fgets(buf,sizeof(buf),stdin)!=buf) 63 { 64 printf("fgets error!\n"); 65 exit(1); 66 } 67 if(write(new_fd,buf,strlen(buf))==-1) 68 { 69 fprintf(stderr,"Write error!\n",strerror(errno)); 70 exit(1); 71 } 72 close(new_fd); 73 } 74 close(sockfd); 75 exit(0); 76 }
/*客户端*/ #include<stdio.h> #include<stdlib.h> #include<string.h> #include<errno.h> #include<netdb.h> #include<sys/types.h> #include<netinet/in.h> #include<sys/socket.h> int main(int argc, char *argv[]) { int sockfd; char buffer[1024]; struct sockaddr_in server_addr; struct hostent *host; int portnumber,nbytes; if(argc!=3) { fprintf(stderr,"Usage:%s hostname portnumber\a\n0",argv[0]); exit(1); } if((host=gethostbyname(argv[1]))==NULL) { fprintf(stderr,"Gethostname error\n"); exit(1); } if((portnumber=atoi(argv[2]))<0) { fprintf(stderr,"Usage:%s hostname portnumber\a\n",argv[0]); exit(1); } while(1) { if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1) { fprintf(stderr,"Socket Error:%s\a\n",strerror(errno)); exit(1); } bzero(&server_addr,sizeof(server_addr)); server_addr.sin_family=AF_INET; server_addr.sin_port=htons(portnumber); server_addr.sin_addr=*((struct in_addr *)host->h_addr); if(connect(sockfd,(struct sockaddr *)(&server_addr),sizeof(struct sockaddr))==-1) { fprintf(stderr,"Connect Error:%s\a\n",strerror(errno)); exit(1); } if((nbytes=read(sockfd,buffer,1024))==-1) { fprintf(stderr,"Read Error:%s\a\n",strerror(errno)); exit(1); } buffer[nbytes]=‘\0‘; printf("I have received:%s",buffer); close(sockfd); } exit(0); }
程序的执行
gcc -o server_tcp server_tcp.c gcc -o client_tcp client_tcp.c 在第一个shell端 ./server_tcp 5678 在第二个shell端 ./client_tcp localhost 5678
程序的执行结果
1 shell 1 2 Server get connection from 1995400920: 3 Connect successful,please input the message [<1024 bytes]: 4 jljgjglk 5 6 7 shell 2 8 I have received:jljgjglk
标签:
原文地址:http://www.cnblogs.com/wireless-dragon/p/5187090.html