linux tcp多线程服务器与客户端编程实例

服务器端:

#include<iostream>#include<arpa/inet.h>#include<sys/socket.h>#include<cstdlib>#include<cstdio>#include<pthread.h>using namespace std;void *run(void *arg);int main(void){int fd=0,res=0;unsigned int port=8888;struct sockaddr_in my_addr;//init sockaddr_in//bzero(my_addr,sizeof(my_addr));my_addr.sin_family=AF_INET;my_addr.sin_port=htons(port);my_addr.sin_addr.s_addr=htonl(INADDR_ANY);//1,create tcp socketfd=socket(AF_INET,SOCK_STREAM,0);if(fd<0){perror("socket");exit(-1);}cout<<"create socket success,fd:"<<fd<<endl;//2,bind sockfd with sockaddrres = bind(fd,(struct sockaddr *)&my_addr,sizeof(my_addr));if(res!=0){perror("bind");close(fd);exit(-1);}cout<<"bind success."<<endl;//3,switch active to unactiveres = listen(fd,10);if(res!=0){perror("bind");close(fd);exit(-1);}cout<<"listen success."<<endl;//4,waiting and accept client connect request…int client_fd=0;unsigned client_port=0;char client_ip[20];pthread_t tid;sockaddr_in client_addr;socklen_t socklen = sizeof(client_addr);cout<<"server listenning at port "<<port<<endl;while(1){client_fd = accept(fd,(struct sockaddr *)&client_addr,&socklen);if(client_fd<0){perror("accept");close(fd);exit(-1);}//get client ip and portinet_ntop(AF_INET,&client_addr.sin_addr.s_addr,client_ip,sizeof(client_ip));client_port = ntohs(client_addr.sin_port);cout<<"client "<<client_ip<<":"<<client_port<<" connected,client fd:"<<client_fd<<endl;//create new thread handle clientpthread_create(&tid,NULL,run,(void *)client_fd);pthread_detach(tid);}close(fd);return 0;}void *run(void *arg)//thread execute function{int client_fd = (int)arg;int len=0;char *buf[512];while(1){len = read(client_fd,buf,sizeof(buf));//read data from clientif(len==0){cout<<"client disconnected."<<endl;close(client_fd);break;}len = write(client_fd,buf,len);//echo to client}return NULL;}

客户端:

#include<iostream>#include<arpa/inet.h>#include<sys/socket.h>#include<cstdlib>#include<cstdio>#include<cstring>using namespace std;int main(void){int fd=0,res=0,len=0;unsigned int server_port = 8888;const char *server_ip = "192.168.1.19";char sendbuf[512]="",getbuf[512]="";struct sockaddr_in server;//init server sockaddrserver.sin_family = AF_INET;server.sin_port = htons(server_port);inet_pton(AF_INET,server_ip,&server.sin_addr.s_addr);//create tcp socketfd = socket(AF_INET,SOCK_STREAM,0);if(fd<0){perror("socket");exit(-1);}cout<<"create socket success,fd:"<<fd<<endl;//connect to server…res = connect(fd,(struct sockaddr *)&server,sizeof(server));if(res!=0){perror("connect");close(fd);exit(-1);}cout<<"connect to server success."<<endl;while(1){cout<<">:";cin.getline(sendbuf,sizeof(sendbuf));send(fd,sendbuf,strlen(sendbuf),0);//send data to serverlen = recv(fd,getbuf,sizeof(getbuf),0);//receive data from servergetbuf[len]=’\0′;if(len==0){cout<<"server disconnected"<<endl;close(fd);break;}cout<<"recv from server:"<<getbuf<<endl;}return 0;}

,你所缺少的部分,也早已被我用想像的画笔填满。

linux tcp多线程服务器与客户端编程实例

相关文章:

你感兴趣的文章:

标签云: