【发布时间】:2019-04-09 04:39:59
【问题描述】:
我正在尝试修改我当前的套接字程序以捕获混杂的数据包。我目前拥有的是能够正常捕获数据包。我已经看到了如何在 Linux 上执行此操作的其他答案,但我需要找到一种在 Windows 上完成此操作的方法。
这是我的代码:
int main(int argc, char const *argv[])
{
SOCKET s; //The bound socket
struct sockaddr_in server;
int recv_len; //Size of received data
char udpbuf[BUFLEN]; //A buffer for the incoming data.
float data; //The data in the packet
//Create a socket
if ((s = socket(AF_INET, SOCK_RAW, 0)) == INVALID_SOCKET)
{
printf("Could not create socket : %d", WSAGetLastError());
}
printf("Socket created.\n");
//Prepare the sockaddr_in structure
server.sin_family = AF_INET;
server.sin_addr.s_addr = inet_addr(ADDR);
server.sin_port = htons(PORT);
//Bind socket to address
if (bind(s, (struct sockaddr *)&server, sizeof(server)) == SOCKET_ERROR)
{
printf("Bind failed with error code : %d", WSAGetLastError());
exit(EXIT_FAILURE);
}
puts("Bind done\n");
while (true)
{
//Block statment. Code will wait until it detect packets.
if ((recv_len = recvfrom(s, udpbuf, BUFLEN, 0, 0, 0)) == SOCKET_ERROR)
{
printf("recvfrom() failed with error code : %d", WSAGetLastError());
exit(EXIT_FAILURE);
}
return 0;
}
【问题讨论】:
-
为什么这个标签是“C++”?这段代码没有任何 C++,它是直接的 C。
-
对不起。这一切都是从
.cpp文件开始的,我的目标是编写一个 C++ 程序。我会更新标签。
标签: c windows sockets networking