TCP建立连接结束过程,client与server数据传输

来源:互联网 发布:c语言 volatile关键字 编辑:程序博客网 时间:2024/05/31 19:33
/*client.c*/#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>#include <sys/socket.h>#include <netinet/in.h>#define MAXLINE 80#define SERV_PORT 8000int main(int argc,char *argv[]){struct sockaddr_in servaddr;char buf[MAXLINE];int sockfd,n;char *str;if(argc!=2){fputs("usage:./client message\n",stderr);exit(1);}str=argv[1];sockfd=socket(AF_INET,SOCK_STREAM,0);bzero(&servaddr,sizeof(servaddr));servaddr.sin_family=AF_INET;inet_pton(AF_INET,"127.0.0.1",&servaddr.sin_addr);servaddr.sin_port=htons(SERV_PORT);connect(sockfd,(struct sockaddr *)&servaddr,sizeof(servaddr));write(sockfd,str,strlen(str));n=read(sockfd,buf,MAXLINE);printf("Response from server:\n");write(STDOUT_FILENO,buf,n);printf("\n");close(sockfd);return 0;}

/*server.c*/#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>#include <sys/socket.h>#include <netinet/in.h>#define MAXLINE 80#define SERV_PORT 8000int main(void){struct sockaddr_in servaddr,cliaddr;socklen_t cliaddr_len;int listenfd,connfd;char buf[MAXLINE];char str[INET_ADDRSTRLEN];int i,n;listenfd=socket(AF_INET,SOCK_STREAM,0);bzero(&servaddr,sizeof(servaddr));servaddr.sin_family=AF_INET;servaddr.sin_addr.s_addr=htonl(INADDR_ANY);servaddr.sin_port=htons(SERV_PORT);bind(listenfd,(struct sockaddr *)&servaddr,sizeof(servaddr));listen(listenfd,20);printf("Accepting connections ...\n");while(1){cliaddr_len=sizeof(cliaddr);connfd=accept(listenfd,(struct sockaddr *)&cliaddr,&cliaddr_len);n=read(connfd,buf,MAXLINE);printf("received from %s at PORT %d\n",inet_ntop(AF_INET,&cliaddr.sin_addr,str,sizeof(str)),ntohs(cliaddr.sin_port));for(i=0;i<n;i++)buf[i]=toupper(buf[i]);write(connfd,buf,n);close(connfd);}return 0;}