当前位置: 首页 » 产品 » 电子五金 » 正文

Linux下基于socket多线程并发通信的实现

放大字体  缩小字体 发布日期: 2024-09-25 10:25   来源:http://www.baidu.com/  作者:无忧资讯  浏览次数:6
核心提示:分类:Linux2011-05-21 18:138455人阅读评论(5)收藏举报socket多线程linuxserverstruct服务器[cpp]view plaincopy#includesys/ty

分类: Linux2011-05-21 18:13 8455人阅读 评论(5) 收藏 举报socket多线程linuxserverstruct服务器[cpp] view plaincopy

  

#include <sys/types.h>  

#include <sys/socket.h>  

#include <stdio.h>  

#include <netinet/in.h>  

#include <arpa/inet.h>  

#include <unistd.h>  

#include <stdlib.h>  

#include <pthread.h>  

void *rec_data(void *fd);  

int main(int argc,char *argv[])  

{  

       int server_sockfd;  

    int *client_sockfd;  

       int server_len, client_len;  

       struct sockaddr_in server_address;  

       struct sockaddr_in client_address;  

       struct sockaddr_in tempaddr;  

       int i,byte;  

       char char_recv,char_send;  

       socklen_t templen;  

       server_sockfd = socket(AF_INET, SOCK_STREAM, 0);//创建套接字  

   

       server_address.sin_family = AF_INET;  

       server_address.sin_addr.s_addr =  htonl(INADDR_ANY);  

       server_address.sin_port = htons(9734);  

       server_len = sizeof(server_address);  

        

       bind(server_sockfd, (struct sockaddr *)&server_address, server_len);//绑定套接字  

       templen = sizeof(struct sockaddr);  

   

       printf("server waiting for connect/n");  

       while(1){  

              pthread_t thread;//创建不同的子线程以区别不同的客户端  

              client_sockfd = (int *)malloc(sizeof(int));  

              client_len = sizeof(client_address);  

              *client_sockfd = accept(server_sockfd,(struct sockaddr *)&client_address, (socklen_t *)&client_len);  

              if(-1==*client_sockfd){  

                     perror("accept");  

                     continue;  

              }  

              if(pthread_create(&thread, NULL, rec_data, client_sockfd)!=0)//创建子线程  

              {  

                     perror("pthread_create");  

                     break;  

              }  

       }  

       shutdown(*client_sockfd,2);  

       shutdown(server_sockfd,2);  

}  

  

void *rec_data(void *fd)  

{  

       int client_sockfd;  

       int i,byte;  

       char char_recv[100];//存放数据  

       client_sockfd=*((int*)fd);  

       for(;;)  

       {  

              if((byte=recv(client_sockfd,char_recv,100,0))==-1)  

              {  

                     perror("recv");  

                     exit(EXIT_FAILURE);   

              }  

              if(strcmp(char_recv, "exit")==0)//接受到exit时,跳出循环  

                     break;  

 
 
[ 产品搜索 ]  [ 加入收藏 ]  [ 告诉好友 ]  [ 打印本文 ]  [ 违规举报 ]  [ 关闭窗口 ]

 

 
推荐图文
推荐产品
点击排行
    行业协会  备案信息  可信网站