| 
 发送端: 
void main() { 
  
 //--------------------------------------------- 
 // Declare and initialize variables 
 WSADATA wsaData; 
 WSABUF DataBuf[2]; 
 WSAOVERLAPPED Overlapped; 
 SOCKET SendSocket; 
 sockaddr_in RecvAddr; 
 sockaddr_in LocalAddr; 
 int RecvAddrSize = sizeof(RecvAddr); 
 int LocalAddrSize = sizeof(LocalAddr); 
 int Port = 27015; 
 char *ip; 
 char SendBuf1[1024] = "Data buffer to send1"; 
 char SendBuf2[1024] = "Data buffer to send2"; 
 int BufLen = 1024; 
 DWORD BytesSent = 0, Flags = 0; 
  
 //--------------------------------------------- 
 // Initialize Winsock 
 WSAStartup(MAKEWORD(2,2), &wsaData); 
  
 //--------------------------------------------- 
 // Create a socket for sending data 
 SendSocket = WSASocket(AF_INET, SOCK_DGRAM, IPPROTO_UDP, NULL, 0, WSA_FLAG_OVERLAPPED); 
  
 //--------------------------------------------- 
 // Set up the RecvAddr structure with the IP address of 
 // the receiver (in this example case "123.123.123.1") 
 // and the specified port number. 
 RecvAddr.sin_family = AF_INET; 
 RecvAddr.sin_port = htons(Port); 
 RecvAddr.sin_addr.s_addr = inet_addr("127.0.0.1"); 
  
 //--------------------------------------------- 
 // Set up the LocalAddr structure with the local IP address 
 // and the specified port number. 
 hostent* localHost; 
 localHost = gethostbyname(""); 
 ip = inet_ntoa (*(struct in_addr *)*localHost->h_addr_list); 
  
 LocalAddr.sin_family = AF_INET; 
 LocalAddr.sin_addr.s_addr = inet_addr("127.0.0.1"); 
 LocalAddr.sin_port = htons(Port); 
  
 //--------------------------------------------- 
 // Bind the sending socket to the LocalAddr structure 
 // that has the internet address family, local IP address 
 // and specified port number.   
 bind(SendSocket, (sockaddr*) &LocalAddr, LocalAddrSize); 
  
 //--------------------------------------------- 
 // Send a datagram to the receiver 
 printf("Sending a datagram...\n"); 
 DataBuf[0].len = BufLen; 
 DataBuf[0].buf = SendBuf1; 
 DataBuf[1].len = BufLen; 
 DataBuf[1].buf = SendBuf2; 
 WSASendTo(SendSocket,  
  DataBuf,  
  2, 
  &BytesSent, 
  Flags, 
  (SOCKADDR*) &RecvAddr, 
  RecvAddrSize, 
  NULL, 
  NULL); 
  
 //--------------------------------------------- 
 // When the application is finished sending, close the socket. 
 printf("Finished sending. Closing socket.\n"); 
 closesocket(SendSocket); 
 printf("Exiting.\n"); 
  
 //--------------------------------------------- 
 // Clean up and quit. 
 WSACleanup(); 
 return; 
} 接收端: 
void main() { 
  
 WSADATA wsaData; 
 WSABUF DataBuf[2]; 
 WSAOVERLAPPED Overlapped; 
 SOCKET RecvSocket; 
 sockaddr_in RecvAddr; 
 sockaddr_in SenderAddr; 
 int SenderAddrSize = sizeof(SenderAddr); 
 int Port = 27015; 
 char RecvBuf1[1024]; 
 int  BufLen1 = 1024; 
 char RecvBuf2[1024]; 
 int  BufLen2 = 1024; 
 DWORD BytesRecv = 0, Flags = 0, BytesTransferred = 0; 
  
 //----------------------------------------------- 
 // Initialize Winsock 
 WSAStartup(MAKEWORD(2,2), &wsaData); 
  
 //----------------------------------------------- 
 // Create a receiver socket to receive datagrams 
 RecvSocket = WSASocket(AF_INET,  
  SOCK_DGRAM,  
  IPPROTO_UDP,  
  NULL,  
  0,  
  WSA_FLAG_OVERLAPPED); 
  
 //----------------------------------------------- 
 // Bind the socket to any address and the specified port. 
 RecvAddr.sin_family = AF_INET; 
 RecvAddr.sin_port = htons(Port); 
 RecvAddr.sin_addr.s_addr = htonl(INADDR_ANY); 
  
 bind(RecvSocket, (SOCKADDR *) &RecvAddr, sizeof(RecvAddr)); 
  
  
 //----------------------------------------------- 
 // Call the recvfrom function to receive datagrams 
 // on the bound socket. 
 DataBuf[0].len = BufLen1; 
 DataBuf[0].buf = RecvBuf1; 
 DataBuf[1].len = BufLen2; 
 DataBuf[1].buf = RecvBuf2; 
 printf("Listening for incoming datagrams...\n"); 
 WSARecvFrom(RecvSocket,  
  DataBuf,  
  2,  
  &BytesRecv,  
  &Flags,  
  (SOCKADDR *) &SenderAddr,  
  &SenderAddrSize,  
  NULL,  
  NULL); 
  
 //--------------------------------------------- 
 // When the application is finished receiving, close the socket. 
 printf("Finished receiving. Closing socket.\n"); 
 closesocket(RecvSocket); 
 printf("Exiting.\n"); 
  
 //--------------------------------------------- 
 // Clean up and quit. 
 WSACleanup(); 
 return; 
}  
 |