IO并发之多进程及多线程实现

  服务器demo:

#include "lib.h"       //封装的头文件

#define SERVER_PORT 6666

//多线程实现
void * pthread_fun(void *arg)
{
	char buf[1024]={0};
	int confd=*(int *)arg;
	while(1)
	{
		memset(buf,0,sizeof(buf));
		if(recv(confd,buf,sizeof(buf),0)==0)
		{
			return NULL;
		}
		printf("buf=%s\n",buf);
	}
}
int main()
{   
    int i=0;
    pthread_t tid[1024]={0};
	int serverSocket;
	struct sockaddr_in server_addr;
	struct sockaddr_in client_addr;
	int addr_len=sizeof(client_addr);
	int  client;
	int iDataNum;
	char buf[1024];
	
	if((serverSocket=socket(AF_INET,SOCK_STREAM,0))<0)
	{
		perror("Socket");
		exit(1);
	}
	bzero(&server_addr,sizeof(server_addr));
	server_addr.sin_family=AF_INET;
	server_addr.sin_port=htons(SERVER_PORT);
	server_addr.sin_addr.s_addr=htonl(INADDR_ANY);
	
	//调高端口的重用性
       int on;
       if(setsockopt(serverSocket,SOL_SOCKET,SO_REUSEADDR,&on,sizeof(int))<<0)
       {
	     perror("setsockopt error\n");
	     return 0;
       }
	if(bind(serverSocket,(struct sockaddr *)&server_addr,\
	sizeof(server_addr))<0)
	{
		perror("bind");
		exit(1);
		
	}
	listen(serverSocket,5);
	
	while(1)
	{
	    client=accept(serverSocket,(struct sockaddr *)&client_addr,\
	       &addr_len);
	
	    if(client==-1)
        {
		  perror("accept");
		  return -1;
	    }
		pthread_create(&tid[i++],NULL,pthread_fun,&client);
		/*多进程实现
		if(fork()==0)
		{
			 while(1)
		    {
				memset(buf,0,sizeof(buf));
				iDataNum=recv(client,buf,1024,0);
				if(iDataNum<=0)
				{
					perror("Recv");
					return -1;
				}
				printf("\nRecv client data.....\n");
				printf("recv data is %s\n",buf);
				send(client,buf,sizeof(buf),0);
		    }
		}
		*/
	}
	close(client);
	close(serverSocket);
	
	return 0;
}

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值