【发布时间】:2017-06-28 11:45:40
【问题描述】:
我正在尝试读取本地连接到笔记本电脑的硬件设备发送的 UDP 数据包的内容。
在 Visual Studio 中,我编写了一个快速的 w32 控制台应用程序,只是为了读取 UDP 数据包:
WSAData wsaData;
WORD DllVersion = MAKEWORD(2, 1);
if (WSAStartup(DllVersion, &wsaData) != 0)
{
MessageBoxA(NULL, "Winsock startup failed", "Error", MB_OK | MB_ICONERROR);
exit(1);
}
SOCKADDR_IN addr;
int sizeofaddr = sizeof(addr);
addr.sin_addr.s_addr = inet_addr("192.168.1.1");
addr.sin_port = htons(1234);
addr.sin_family = AF_INET;
SOCKET sListen = socket(AF_INET, SOCK_STREAM, NULL); //Create socket to listen for new connections
bind(sListen, (SOCKADDR*)&addr, sizeof(addr)); //Bind the address to the socket
listen(sListen, SOMAXCONN); //Places sListen socket in a state in which it is listening for an incoming connection. Note:SOMAXCONN = Socket Oustanding Max Connections
SOCKET Connection = socket(AF_INET, SOCK_STREAM, NULL); //Set Connection socket
if (connect(Connection, (SOCKADDR*)&addr, sizeofaddr) != 0) //If we are unable to connect...
{
MessageBoxA(NULL, "Failed to Connect", "Error", MB_OK | MB_ICONERROR);
return 0; //Failed to Connect
}
std::cout << "Connected!" << std::endl;
char MOTD[1280];
recvfrom(Connection, MOTD, sizeof(MOTD), 217, (SOCKADDR *)&addr, &sizeofaddr);
std::cout << "Done:" << MOTD << std::endl;
while (true)
{
Sleep(10);
}
输出是:
我可以在 wireshark 中看到带有数据的 UDP 数据包,从那边看一切都很好。
任何想法我做错了什么?是否有任何其他方式来接收来自网络的 UDP 数据包?
【问题讨论】:
-
你能用符号作为标志吗
217是什么标志? -
你没有检查
recvfrom的值。 -
嗨,理查德,对不起,我确实发布了错误的函数,实际上我得到了:recvfrom(Connection, MOTD, sizeof(MOTD), 0, (SOCKADDR *)&addr, &sizeofaddr);标志是 0