我正在编写原始套接字客户端(成功发送UDP数据包)和服务器套接字,问题出在服务器部分。
我通过以下方式创建套接字:
int raw_socket = socket(AF_INET, SOCK_RAW, IPPROTO_UDP);
我也用 IPPROTO_RAW 尝试过,但得到相同的结果,我正在绑定它:
bind(raw_socket, (struct sockaddr*)&sockstr, sizeof(sockstr))
当尝试使用套接字接收一些数据包时,我收到的唯一有效负载是“E”(我认为这意味着“错误”),或者套接字继续侦听但阻塞并且没有任何反应。如何使用原始套接字接收 UDP 数据包?我的代码:
#include <stdio.h>
#include <stdlib.h>
#include <netdb.h>
#include <netinet/in.h>
#include <string.h>
int server(){
int raw_socket = socket(AF_INET, SOCK_RAW, IPPROTO_RAW);
if (raw_socket== -1){
perror("Socket_creation_error\n");
return 1;
}
struct sockaddr_in sockstr;
sockstr.sin_addr.s_addr = inet_addr("127.0.0.1");
sockstr.sin_family = AF_INET;
sockstr.sin_port = htons(9090);
socklen_t s = (socklen_t)sizeof(sockstr);
if (bind(raw_socket, (struct sockaddr*)&sockstr, sizeof(sockstr))< 0){
perror("binding_err\n");
return 0;
}
char* msg[256];
memset(msg, 0, 256);
recv(raw_socket, msg, sizeof(msg), 0);
printf(msg);
return …Run Code Online (Sandbox Code Playgroud)