C++ UDP BUD()总是返回- 1
我想发送一个UDP数据包 我使用VisualStudioC++ 2017,我已经链接了LB WS2Y332。 以下是说明此问题所需的示例代码: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
#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。您正确地创建了套接字。