转载链接:http://blog.163.com/caipeipei_love@126/blog/static/2596603220101118433940/
tcpserver.c
#include<stdlib.h>
#include<stdio.h>
#include<errno.h>
#include<string.h>
#include<netdb.h>
#include<sys/types.h>
#include<netinet/in.h>
#include<sys/socket.h>
#include<unistd.h>
#include<arpa/inet.h>
#define portnumber 8080
int main(int argc ,char *argv[])
{int sockfd,new_fd;struct sockaddr_in server_addr;struct sockaddr_in client_addr;int sin_size,iDataNum;
// const char hello[]="Hello cpp, you are success.\n";char buffer[4096];if(argc!=2){fprintf(stderr,"Usage:%s portnumber\a\n",argv[0]);return 0;}// if((portnumber=atoi(argv[1]))<0)// {// fprintf(stderr,"Usage:%s portnumber\a\n",argv[0]);
// return 0;// }if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1){fprintf(stderr,"Socket error:%s\n\a",strerror(errno));return 0;}bzero(&server_addr,sizeof(struct sockaddr_in));server_addr.sin_family=AF_INET;server_addr.sin_addr.s_addr=htonl(INADDR_ANY);server_addr.sin_port=htons(portnumber);if(bind(sockfd,(struct sockaddr *)(&server_addr),sizeof(struct sockaddr))==-1){fprintf(stderr,"Bind error:%s\n\a",strerror(errno));return 0;}if(listen(sockfd,5)==-1){fprintf(stderr,"Listen error:%s\n\a",strerror(errno));return 0;}while(1){sin_size=sizeof(struct sockaddr_in);if((new_fd=accept(sockfd,(struct sockaddr *)(&client_addr),&sin_size))==-1){fprintf(stderr,"Accept error:%s\n\a",strerror(errno));return 0;}fprintf(stdout,"Server get connection from %s\n",inet_ntoa(client_addr.sin_addr));iDataNum=recv(new_fd,buffer,4096,0);if(iDataNum<0){perror("Recv\n");exit(1);}printf("Recv data is %s\n",buffer);send(new_fd,buffer,sizeof(buffer),0);
// if(write(new_fd,hello,strlen(hello))==-1)
// {
// fprintf(stderr,"write error:%s\n",strerror(errno));
// return 0;
// }close(new_fd);}close(sockfd);// exit(0);return 0;
}
tcpclient.c
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#include<netdb.h>
#include<sys/types.h>
#include<netinet/in.h>
#include<sys/socket.h>
#include<unistd.h>
#include<arpa/inet.h>
#include<errno.h>int main(int argc,char *argv[])
{int sockfd;char sendbuffer[200];char recvbuffer[200];// char buffer[1024];struct sockaddr_in server_addr;struct hostent *host;int portnumber,nbytes;if(argc!=3){fprintf(stderr,"Usage :%s hostname portnumber\a\n",argv[0]);exit(1);}if((host=gethostbyname(argv[1]))==NULL){herror("Get host name error\n");exit(1);}if((portnumber=atoi(argv[2]))<0){fprintf(stderr,"Usage:%s hostname portnumber\a\n",argv[0]);exit(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\n",strerror(errno));exit(1);}while(1){printf("Please input your word:\n");scanf("%s",sendbuffer);printf("\n");if(strcmp(sendbuffer,"quit")==0)break;send(sockfd,sendbuffer,sizeof(sendbuffer),0);recv(sockfd,recvbuffer,200,0);printf("recv data of my world is :%s\n",recvbuffer);}// if((nbytes=read(sockfd,buffer,1024))==-1)//{
// fprintf(stderr,"read error:%s\n",strerror(errno));
// exit(1);// }// buffer[nbytes]='\0';// printf("I have received %s\n",buffer);close(sockfd);exit(0);
}
首先要编译tcpserver.c,命令:
gcc -g tcpserver.c -o tcpserver
./tcpserver 8080
然后再编译tcpclient.c,具体命令:
gcc -g tcpclient.c -o tcpclient
./tcpclient localhost 8080