嵌入式Linux網(wǎng)絡(luò)編程之:網(wǎng)絡(luò)基礎(chǔ)編程
(3)使用實例。
該實例分為客戶端和服務(wù)器端兩部分,其中服務(wù)器端首先建立起socket,然后與本地端口進行綁定,接著就開始接收從客戶端的連接請求并建立與它的連接,接下來,接收客戶端發(fā)送的消息。客戶端則在建立socket之后調(diào)用connect()函數(shù)來建立連接。
服務(wù)端的代碼如下所示:
/*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);
/*設(shè)置sockaddr_in結(jié)構(gòu)體中相關(guān)參數(shù)*/
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;/*允許重復(fù)使用本地地址與套接字進行綁定*/
setsockopt(sockfd,SOL_SOCKET,SO_REUSEADDR,i,sizeof(i));
/*綁定函數(shù)bind()*/
if(bind(sockfd,(structsockaddr*)server_sockaddr,
sizeof(structsockaddr))==-1)
{
perror(bind);
exit(1);
}
printf(Bindsuccess!n);
/*調(diào)用listen()函數(shù),創(chuàng)建未處理請求的隊列*/
if(listen(sockfd,MAX_QUE_CONN_NM)==-1)
{
perror(listen);
exit(1);
}
printf(Listening....n);
/*調(diào)用accept()函數(shù),等待客戶端的連接*/
if((client_fd=accept(sockfd,
(structsockaddr*)client_sockaddr,sin_size))==-1)
{
perror(accept);
exit(1);
}
/*調(diào)用recv()函數(shù)接收客戶端的請求*/
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操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)linux相關(guān)文章:linux教程
評論