我試圖讀取本地連接到筆記本電腦的硬件設備發送的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