无连接通信是通过UDP/IP协议完成的。数据的传输利用数据包,即离散信息包。

 
  
  1. int recvfrom( 
  2.   SOCKET s, 
  3.   char FAR* buf, 
  4.   int len, 
  5.   int flags, 
  6.   struct sockaddr FAR* from, 
  7.   int FAR* fromlen 
  8. ); 
  9.  
  10. int WSARecvfrom( 
  11.   SOCKET s, 
  12.   LPWSABUF lpBuffers, 
  13.   DWORD dwBufferCount, 
  14.   LPDWORD lpNumberOfBytesRecvd, 
  15.   LPDWORD lpFlags, 
  16.   struct sockaddr FAR* lpfrom, 
  17.   LPINT  fromlen, 
  18.   LPWSAOVERLAPPED lpOverlapped, 
  19.   LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine 
  20. ); 

创建一个简单的接收端应用程序

 
  
  1. #include<winsock2.h> 
  2.  
  3. void main(void
  4.   WSADATA wsaData; 
  5.   SOCKET s; 
  6.   SOCKADDR_IN Recvaddr; 
  7.   SOCKADDR_IN Sendaddr; 
  8.   int port = 5050; 
  9.   char buffer[1024]; 
  10.   int buflen = 1024; 
  11.   int sendaddrsize = sizeof(Sendaddr); 
  12.    
  13.   WSAStartup(MAKEWORD(2,2), &wsaData); 
  14.   s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); 
  15.   Recvaddr.sin_family = AF_INET; 
  16.   Recvaddr.sin_port = htons(port); 
  17.   Recvaddr.sin_addr.s_addr = htonl(INADDR_ANY); 
  18.   bind(s, (SOCKADDR *)&Recvaddr, sizeof(Recvaddr)); 
  19.    
  20.   recvfrom(s, buffer, buflen, 0, (SOCKADDR*)&Sendaddr, &sendaddrsize); 
  21.   closesocket(s); 
  22.   WSACleanup(); 

发送端

 
  
  1. int sendto( 
  2.   SOCKET s, 
  3.   const char FAR* buf, //发送数据的缓冲区
  4.   int len, //指明发送多少字节
  5.   int flag, 
  6.   const sockaddr FAR* to, 
  7.   int tolen 
  8. ); 
 
  
  1. int WSASendto(   
  2.   SOCKET s,    
  3.   LPWSABUF lpBuffers,  
  4.   DWORD dwBufferCount,   
  5.   LPDWORD lpNumberOfBytesSend,     
  6.   LPDWORD lpFlags,   
  7.   struct sockaddr FAR* lpto,    
  8.   LPINT  tolen,    
  9.   LPWSAOVERLAPPED lpOverlapped,     
  10.   LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine     
  11. ); 

 

简单的发送端程序

 
  
  1. #include <winsock2.h> 
  2.  
  3. void main(void
  4.   WSADATA wsaData; 
  5.   SOCKET s; 
  6.   SOCKADDR_IN addr; 
  7.   int port = 5050; 
  8.   char buffer[1024]; 
  9.   int len = 1024; 
  10.    
  11.   WSAStartup(MAKEWORD(2,2), &wsaData); 
  12.   s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); 
  13.   addr.sin_family = AF_INET; 
  14.   addr.sin_port = htons(port); 
  15.   addr.sin_addr.s_addr = inet_addr("123.123.123.123"); 
  16.    
  17.   sendto(s, buffer, len, 0, (SOCKADDR*)&addr, sizeof(addr)); 
  18.   closesocket(s); 
  19.   WSACleanup(); 

 

因为无连接协议没有连接,所有也不会有对连接的正式关闭和从容关闭。只需要调用closesocket即可释放资源。