嵌入式Linux网络编程之:网络基础编程
(3)使用实例。
该实例分为客户端和服务器端两部分,其中服务器端首先建立起socket,然后与本地端口进行绑定,接着就开始接收从客户端的连接请求并建立与它的连接,接下来,接收客户端发送的消息。客户端则在建立socket之后调用connect()函数来建立连接。
服务端的代码如下所示:
/*server.c*/
#includesys/types.h>
#includesys/socket.h>
#includestdio.h>
#includestdlib.h>
#includeerrno.h>
#includestring.h>
#includeunistd.h>
#includenetinet/in.h>
#definePORT4321
#defineBUFFER_SIZE1024
#defineMAX_QUE_CONN_NM5
intmain()
{
structsockaddr_inserver_sockaddr,client_sockaddr;
intsin_size,recvbytes;
intsockfd,client_fd;
charbuf[BUFFER_SIZE];
/*建立socket连接*/
if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1)
{
perror(socket);
exit(1);
}
printf(Socketid=%dn,sockfd);
/*设置sockaddr_in结构体中相关参数*/
server_sockaddr.sin_family=AF_INET;
server_sockaddr.sin_port=htons(PORT);
server_sockaddr.sin_addr.s_addr=INADDR_ANY;
bzero((server_sockaddr.sin_zero),8);
inti=1;/*允许重复使用本地地址与套接字进行绑定*/
setsockopt(sockfd,SOL_SOCKET,SO_REUSEADDR,i,sizeof(i));
/*绑定函数bind()*/
if(bind(sockfd,(structsockaddr*)server_sockaddr,
sizeof(structsockaddr))==-1)
{
perror(bind);
exit(1);
}
printf(Bindsuccess!n);
/*调用listen()函数,创建未处理请求的队列*/
if(listen(sockfd,MAX_QUE_CONN_NM)==-1)
{
perror(listen);
exit(1);
}
printf(Listening....n);
/*调用accept()函数,等待客户端的连接*/
if((client_fd=accept(sockfd,
(structsockaddr*)client_sockaddr,sin_size))==-1)
{
perror(accept);
exit(1);
}
/*调用recv()函数接收客户端的请求*/
memset(buf,0,sizeof(buf));
if((recvbytes=recv(client_fd,buf,BUFFER_SIZE,0))==-1)
{
perror(recv);
exit(1);
}
printf(Receivedamessage:%sn,buf);
close(sockfd);
exit(0);
}
linux操作系统文章专题:linux操作系统详解(linux不再难懂)linux相关文章:linux教程
评论