系统——网络编程

服务器

struct sockaddr_in sockaddr;

sockaddr.sin_family = AF_INET;

sockaddr.sin_addr.s_addr =htonl(innaddr_any) //inet_addr("192.168.1.5") ;

sockaddr.sin_port = htons(80);
socklen_t len=sizeof(sockaddr);
struct sockaddr_in sockaddrClient;

int sock =socket(AF_INET,SOCK_STREAM,0); 

 bind(sock,&sockaddr,sizeof(sockaddr)/len);//return 0 or -1

listen(sock,QCount);//QCount为int型最大监听数

int acceptSock=accept(sock,&sockaddrClient,&len);

客户端 connect(sock,&addr,len); 

recv(acceptSock,buf,nbytes,flags)send(acceptSock,buf,nbytes,flags)

recvfrom/recvmsgsendto/sendmsg


如果是IO模型,则在listen和accept之间添加select /poll/epoll函数,然后检测返回值

对于epoll

//epoll初始化
int nfds;
int m_pj_epollfd = epoll_create(PJ_MAXFD);
struct epoll_event m_pj_epollev[PJ_MAXFD];
//添加socket
ev.data.fd = sock;   
ev.events = EPOLLIN|EPOLLET;  
epoll_ctl(m_pj_epollfd, EPOLL_CTL_ADD, sock, &ev); 

listen(sock,MAX);
while(1)
{
 	nfds = epoll_wait(m_pj_epollfd, m_pj_epollev, PJ_MAXFD, -1); //事件数
	for(i=0;i<nfds;i++)
	{
		int sockfd = m_pj_epollev[i].data.fd;//事件
		epoll_event _event = m_pj_epollev[i];
		//分别处理 
		if(sock==sockfd){ ... accpet(sockfd);//...再添加socket
		} 
		elseif(_event.events&EPOLLIN){..... recv(sock)....;}//处理socket
		else; 
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值