微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 嵌入式Linux网络编程之:网络高级编程

嵌入式Linux网络编程之:网络高级编程

时间:09-13 来源:互联网 点击:

调用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

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top