socket多线程实现tcpserver

    科技2022-09-07  108

    #include<stdio.h> #include<stdlib.h> #include<unistd.h> #include<string.h> #include<assert.h> #include<sys/socket.h> #include<netinet/in.h> #include<arpa/inet.h> #include<pthread.h> int InitSocket() { int sockfd=socket(AF_INET,SOCK_STREAM,0); if(sockfd==-1)return -1; struct sockaddr_in saddr; memset(&saddr,0,sizeof(saddr)); saddr.sin_family=AF_INET; saddr.sin_port=htons(6000); saddr.sin_addr.s_addr=inet_addr("127.0.0.1"); int res=bind(sockfd,(struct sockaddr*)&saddr,sizeof(saddr)); if(res==-1)return -1; listen(sockfd,5); if(res==-1)return -1; return sockfd; } void*fun(void*arg) { int c=(int)arg; while(1) { char buff[128]={0}; if(recv(c,buff,127,0)<=0) { break; } printf("recv(%d)=%s\n",c,buff); send(c,"ok",2,0); } printf("a client is connected(%d)\n",c); close(c); } int main() { struct sockaddr_in caddr; int sockfd=InitSocket(); assert(sockfd!=-1); while(1) { int len=sizeof(caddr); int c=accept(sockfd,(struct sockaddr*)&caddr,&len); if(c<0) { continue; } printf("accept c=%d\n",c); pthread_t id; pthread_create(&id,NULL,fun,(void*)c); } close(sockfd); exit(0); }
    Processed: 0.012, SQL: 9