嵌入式Linux网络编程之:网络高级编程
调用socket()函数的描述符作为文件描述符*/
FD_ZERO(inset);
FD_SET(sockfd,inset);
while(1)
{
tmp_inset=inset;
sin_size=sizeof(structsockaddr_in);
memset(buf,0,sizeof(buf));
/*调用select()函数*/
if(!(select(MAX_SOCK_FD,tmp_inset,NULL,NULL,NULL)>0))
{
perror(select);
}
for(fd=0;fdMAX_SOCK_FD;fd++)
{
if(FD_ISSET(fd,tmp_inset)>0)
{
if(fd==sockfd)
{/*服务端接收客户端的连接请求*/
if((client_fd=accept(sockfd,
(structsockaddr*)client_sockaddr,sin_size))==-1)
{
perror(accept);
exit(1);
}
FD_SET(client_fd,inset);
printf(Newconnectionfrom%d(socket)\n,client_fd);
}
else/*处理从客户端发来的消息*/
{
if((count=recv(client_fd,buf,BUFFER_SIZE,0))>0)
{
printf(Receivedamessagefrom%d:%s\n,
client_fd,buf);
}
else
{
close(fd);
FD_CLR(fd,inset);
printf(Client%d(socket)hasleft\n,fd);
}
}
}/*endofifFD_ISSET*/
}/*endofforfd*/
}/*endifwhilewhile*/
close(sockfd);
exit(0);
}
运行该程序时,可以先启动服务器端,再反复运行客户端程序(这里启动两个客户端进程)即可,服务器端运行结果如下所示:
$./server
listening....
Newconnectionfrom4(socket)/*接受第一个客户端的连接请求*/
Receivedamessagefrom4:Hello,First!/*接收第一个客户端发送的数据*/
Newconnectionfrom5(socket)/*接受第二个客户端的连接请求*/
Receivedamessagefrom5:Hello,Second!/*接收第二个客户端发送的数据*/
Client4(socket)hasleft/*检测到第一个客户端离线了*/
Client5(socket)hasleft/*检测到第二个客户端离线了*/
$./clientlocalhostHello,First!./clientlocalhostHello,Second
嵌入式Linux 网络高级编程 fcntl() 操作系统 select() 相关文章:
- 嵌入式Linux技术在工业控制网络中的应用(10-30)
- 基于嵌入式Linux的组态软件实时数据库的设计(02-01)
- 基于ARM+DSP的嵌入式Linux数控系统设计(11-18)
- 基于嵌入式Linux的细胞特征提取算法设计(11-19)
- 基于S3C2410的嵌入式Linux系统构建(03-02)
- 嵌入式Linux网络编程之:网络基础编程(08-13)