我试图读取本地连接到笔记本电脑的硬件设备发送的UDP数据包的内容。接收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'的值。 – Mat
嗨理查德,对不起,我发布了错误的函数,实际上我得到了:recvfrom(连接,MOTD,sizeof(MOTD),0,(SOCKADDR *)&addr,&sizeofaddr);国旗是0 – joe