linux socket并发编程视频教程,Linux socket编程示例2 多线程并发

本文介绍了一个简单的TCP服务器的实现过程,包括使用socket编程创建服务器、客户端连接处理等关键步骤,并详细展示了通过多线程来同时处理多个客户端请求的具体实现。

#include 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;

int res;

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

server_address.sin_family = AF_INET;

server_address.sin_addr.s_addr = inet_addr("192.168.1.40"); //htonl(INADDR_ANY);

server_address.sin_port = htons(8888);

server_len = sizeof(server_address);

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

if(res == -1)

{

perror("bind failed");

exit(-1);

}

templen = sizeof(struct sockaddr);

res= listen(server_sockfd, 100);// louis 原来的代码确实listen 调试不过

if(res == -1)

{

perror("listen failed");

exit(-1);

}

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;

}else{

printf("pthread_created\n");

}

sleep(1);

}

shutdown(*client_sockfd,2);

shutdown(server_sockfd,2);

}

/*****************************************

* 函数名称:rec_data

* 功能描述:接受客户端的数据

* 参数列表:fd——连接套接字

* 返回结果:void

*****************************************/

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;

printf("receive from client is %s/n",char_recv);//打印收到的数据

}

free(fd);

close(client_sockfd);

pthread_exit(NULL);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值