小编Yom*_*shi的帖子

无法接收原始套接字的数据包

我正在编写原始套接字客户端(成功发送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)

c sockets udp raw-sockets

4
推荐指数
1
解决办法
1万
查看次数

标签 统计

c ×1

raw-sockets ×1

sockets ×1

udp ×1