WSASendTo WSARecvFrom在msdn上的代码的错误

来源:互联网 发布:网络写手如何取名 编辑:程序博客网 时间:2024/06/07 15:02
这个错误让我深深的迷惑了好长时间
我们看一下源代码
#include <stdio.h>#include "winsock2.h"void main() {  //---------------------------------------------  // Declare and initialize variables  WSADATA wsaData;  WSABUF DataBuf;  WSAOVERLAPPED Overlapped;  SOCKET SendSocket;  sockaddr_in RecvAddr;  sockaddr_in LocalAddr;  int RecvAddrSize = sizeof(RecvAddr);  int LocalAddrSize = sizeof(LocalAddr);  int Port = 27015;  char *ip;  char SendBuf[1024] = "Data buffer to send";  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("123.123.123.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(ip);  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.len = BufLen;  DataBuf.buf = SendBuf;  WSASendTo(SendSocket,     &DataBuf,     1,    &BytesSent,    Flags,    (SOCKADDR*) &RecvAddr,    RecvAddrSize,    &Overlapped,    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;}
这是微软的源代码 我直接粘贴编译 返回永远是socketerror并且getlasterror之后,永远都是6(句柄无效)
需要对
Overlapped.m_hevent进行赋值,然而默认值是无效的
Overlapped.m_hevent = CreateEvent(NULL,TRUE,FALSE,NULL) ;
使之变成有效值



0 0
原创粉丝点击