C++ UDP BUD()总是返回- 1

C++ UDP BUD()总是返回- 1,c++,sockets,udp,bind,C++,Sockets,Udp,Bind,我想发送一个UDP数据包 我使用VisualStudioC++ 2017,我已经链接了LB WS2Y332。 以下是说明此问题所需的示例代码: #include <iostream> #include <winsock2.h> #include <sys/types.h> #include <memory.h> #include <errno.h> #include <stdlib.h> #include <stdio

我想发送一个UDP数据包

我使用VisualStudioC++ 2017,我已经链接了LB WS2Y332。 以下是说明此问题所需的示例代码:

#include <iostream>
#include <winsock2.h>
#include <sys/types.h>
#include <memory.h>
#include <errno.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>

#include <ws2tcpip.h>


int main()
{
    sockaddr_in serverAddress;
    memset(&serverAddress, 0, sizeof(serverAddress));
    serverAddress.sin_family = AF_INET;// AF_UNSPEC;
    serverAddress.sin_addr.s_addr = INADDR_ANY;
    serverAddress.sin_port = htons(20000);

    int result = 0;
    SOCKET sock = socket(AF_INET, SOCK_DGRAM, 0); //socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP);

    result = bind(sock, (sockaddr*)&serverAddress, sizeof(serverAddress));
    if (result == -1)
    {
        std::cout << "error!!!!!! Why?";
    }
}
为什么我不能在这里简单地绑定套接字


我看过这里的帖子,但这对我没有帮助,因为这只是一个括号问题。

这就是答案。我没有正确创建套接字

//init
int server_length;
int port = 20000;
const int STRLEN = 256;
char recMessage[STRLEN];
char sendMessage[STRLEN];
char *sendMes = "SERVER READY";
WSADATA wsaData;
SOCKET mySocket;
SOCKET myBackup;
SOCKET acceptSocket;
sockaddr_in myAddress;

//create socket
if (WSAStartup(MAKEWORD(2, 2), &wsaData) != NO_ERROR)
{
    cerr << "Socket Initialization: Error with WSAStartup\n";
    system("pause");
    WSACleanup();
    exit(10);
}

mySocket = socket(AF_INET, SOCK_DGRAM, 0);
if (mySocket == INVALID_SOCKET)
{
    cerr << "Socket Initialization: Error creating socket" << endl;
    system("pause");
    WSACleanup();
    exit(11);
}

myBackup = mySocket;

//bind
myAddress.sin_family = AF_INET;
myAddress.sin_addr.s_addr = inet_addr("127.0.0.1");
myAddress.sin_port = htons(port);

if (bind(mySocket, (SOCKADDR*)&myAddress, sizeof(myAddress)) == SOCKET_ERROR)
{
    cerr << "ServerSocket: Failed to connect\n";
}
对于WinSock,您必须在开始时调用WSAStartup:

WSADATA data;
::WSAStartup(MAKEWORD(2, 0), &data);
最后你必须给WSACleanup打电话:

::WSACleanup();

但在继续之前,请考虑IPv6。sockaddr_in仅适用于IPV4。

错误是?@EJP请阅读标题。我不仅阅读了你的标题,还阅读了你的整个帖子,以及你的空洞评论。您没有提供错误信息-1不是一个错误。它是指示错误的返回值。Winsock调用的实际错误由WSAGetLastError提供。这是相当基本的。请修复您的代码以打印错误值并将结果包含在帖子中。您没有初始化Winsock。您正确地创建了套接字。