与面向链接的网络链接相比,无链接的网络通讯不须要在服务器与客户端之间创建链接。面向非链接的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);