嵌入式Linux網(wǎng)絡編程之:網(wǎng)絡基礎編程
客戶端的代碼如下所示:
/*client.c*/
#includestdio.h>
#includestdlib.h>
#includeerrno.h>
#includestring.h>
#includenetdb.h>
#includesys/types.h>
#includenetinet/in.h>
#includesys/socket.h>
#definePORT4321
#defineBUFFER_SIZE1024
intmain(intargc,char*argv[])
{
intsockfd,sendbytes;
charbuf[BUFFER_SIZE];
structhostent*host;
structsockaddr_inserv_addr;
if(argc3)
{
fprintf(stderr,USAGE:./clientHostname(oripaddress)Textn);
exit(1);
}
/*地址解析函數(shù)*/
if((host=gethostbyname(argv[1]))==NULL)
{
perror(gethostbyname);
exit(1);
}
memset(buf,0,sizeof(buf));
sprintf(buf,%s,argv[2]);
/*創(chuàng)建socket*/
if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1)
{
perror(socket);
exit(1);
}
/*設置sockaddr_in結(jié)構(gòu)體中相關參數(shù)*/
serv_addr.sin_family=AF_INET;
serv_addr.sin_port=htons(PORT);
serv_addr.sin_addr=*((structin_addr*)host->h_addr);
bzero((serv_addr.sin_zero),8);
/*調(diào)用connect函數(shù)主動發(fā)起對服務器端的連接*/
if(connect(sockfd,(structsockaddr*)serv_addr,
sizeof(structsockaddr))==-1)
{
perror(connect);
exit(1);
}
/*發(fā)送消息給服務器端*/
if((sendbytes=send(sockfd,buf,strlen(buf),0))==-1)
{
perror(send);
exit(1);
}
close(sockfd);
exit(0);
}
在運行時需要先啟動服務器端,再啟動客戶端。這里可以把服務器端下載到開發(fā)板上,客戶端在宿主機上運行,然后配置雙方的IP地址,在確保雙方可以通信(如使用ping命令驗證)的情況下運行該程序即可。
$./server
Socketid=3
Bindsuccess!
Listening....
Receivedamessage:Hello,Server!
$./clientlocalhost(或者輸入IP地址)Hello,Server!
linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)linux相關文章:linux教程
評論