與面向鏈接的網絡鏈接相比,無鏈接的網絡通訊不須要在服務器與客戶端之間創建鏈接。面向非鏈接的Socket通訊是基於UDP的,服務器端不須要調用
listen()
和accept()
函數來等待客戶端的鏈接;客戶端直接向服務器發送數據。服務器
一、服務器端
(1)創建Socket,綁定本地IP和端口網絡
server=socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP); sAddr.sin_family=AF_INET; sAddr.sin_port=htons(9000); sAddr.sin_addr.s_addr=htonl(ADDR_ANY); retVal=bind(server,(sockaddr*)&sAddr,sizeof(sAddr));
(2)等待客戶鏈接、接收數據socket
sockaddr_in recvAddr; int len=sizeof(recvAddr); // 鏈接的客戶端地址信息 recvfrom(server,buf,BUF_SIZE,0,(sockaddr*)&recvAddr,&len); cout<<"Recv date from "<<inet_ntoa(recvAddr.sin_addr)<<" :"<<buf<<endl; // 接收數據、recvAddr返回客戶段信息
(3)發送數據函數
sendto(server,buf,strlen(buf),0,(sockaddr*)&recvAddr,len);
二、客戶端
(1)創建Socketcode
client=socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP);
(2)遠程服務器地址信息server
sockaddr_in sAddr; sAddr.sin_family=AF_INET; sAddr.sin_port=htons(9000); sAddr.sin_addr.s_addr=inet_addr("127.0.0.1"); int len=sizeof(sAddr);
(3)發送數據cli
sendto(client,buf,strlen(buf),0,(sockaddr*)&sAddr,len);
(4)接收數據服務器端
recvfrom(client,buf,BUF_SIZE,0,(sockaddr*)&sAddr,&len);