Linux下socket编程之多线程TCP服务器

代码如下:
thread_server.c

#include
#include
#include
#include
#include
#include
#include
#include
#include
void usage(char* proc)
{
    printf("%s [ip][port]\n",proc);
}
int startup(char* ip,int port)
{
    int sock=socket(AF_INET,SOCK_STREAM,0);
    if(sock<0)
    {
        perror("socket");
        return 2;
    }
    struct sockaddr_in local;
    local.sin_family=AF_INET;
    local.sin_port=htons(port);
    local.sin_addr.s_addr=inet_addr(ip);
    int opt=1;
    setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt));
    if((bind(sock,(struct sockaddr*)&local,sizeof(local)))<0)
    {
        perror("bing");
        return 3;
    }
    if(listen(sock,10)<0)
    {
        perror("listen");
        close(sock);
        exit(4);
    }
    return sock;
}
void handler(char* arg)
{
        int sock=(int)arg;
        char buff[1024];
        while(1)
        {
            ssize_t s = read(sock,buff,sizeof(buff));
            if(s >0)
            {
            buff[s] = '\0';
            printf("client:#%s",buff);
            const char* msg = "HTTP/1.1 200 OK\r\n\r\n

This is title

\r\n"
; write(sock,msg,strlen(msg)); } if(s==0) { break; } } printf("client quit!\n"); fflush(stdout); } int main(int argc,char* argv[]) { if(argc<3) { usage(argv[0]); return 1; } int listen_sock=startup(argv[1],atoi(argv[2])); struct sockaddr_in client_addr; socklen_t len=sizeof(client_addr); while(1) { int new_sock=accept(listen_sock,(struct sockaddr *)&client_addr,&len); if(new_sock<0) { perror("accept"); return 5; } char ipbuff[INET_ADDRSTRLEN]; memset(ipbuff,'\0',sizeof(ipbuff)); inet_ntop(AF_INET,&client_addr.sin_addr,ipbuff,sizeof(ipbuff)); printf("get connect,ip is %s,port is %d\n",ipbuff,ntohs(client_addr.sin_port)); pthread_t tid; pthread_create(&tid, NULL, handler, (void*)new_sock); //创建线程执行handler pthread_detach(tid);//将子线程与主线程分离 } close(listen_sock); return 0; }

与tcp和tcp多进程服务器端差别不大,原来是交给一个进程处理,现在是交给一个线程,都类似,不做多的解释,客户端还是看最开始版本tcp客户端,不在这里多写,代码都一样。
实验效果图:
服务器端:
Linux下socket编程之多线程TCP服务器_第1张图片
客户端1:
Linux下socket编程之多线程TCP服务器_第2张图片
客户端2:
Linux下socket编程之多线程TCP服务器_第3张图片
欢迎评论

你可能感兴趣的:(计算机网络编程)