我正在尝试创建udp套接字并通过它发送一个字符串。但它在sendto()给出10038错误

时间:2016-05-03 09:11:30

标签: c++ windows sockets

我是套接字编程的新手。我编写了一个基本函数,它创建一个UDP套接字并通过它发送一个数组。我的函数创建一个套接字并在decriptor中返回0,当我使用sendto()时,它给出10038错误。

这是我的代码:

int ret, a=0;
WSADATA wsa;

if (WSAStartup(MAKEWORD(2,2),&wsa) != 0)
{
    exit(EXIT_FAILURE);
}

if (m_socket == INVALID_SOCKET)
{
   m_socket = (AF_INET, SOCK_DGRAM,0);
}

SOCKADDR_IN addr;
char buf[256];
addr.sin_family=AF_INET;
addr.sin_port=htons(1234);
addr.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");

strcpy(buf,"Hallo world!");
if (m_socket != INVALID_SOCKET)
{
 ret=sendto(m_socket,buf,strlen(buf),0,(SOCKADDR*)&addr,sizeof(SOCKADDR_IN));

 if(ret==SOCKET_ERROR)
 {
  printf("Fehler: sendto, fehler code: %d\n",WSAGetLastError());
  a=WSAGetLastError();
  ret=-1;
 }
 CloseSocket();
 WSACleanup();
 m_socket = INVALID_SOCKET;
}

1 个答案:

答案 0 :(得分:1)

您的代码有:

m_socket = (AF_INET, SOCK_DGRAM,0);

用于初始化m_socket。这将0分配给m_socket不从操作系统分配套接字。因此,您会收到此非套接字错误。

您可以使用:

m_socket = socket(AF_INET, SOCK_DGRAM,0);

掩盖错字。