gpt4 book ai didi

sockets - 从 C 套接字读取十六进制缓冲区的问题

转载 作者:行者123 更新时间:2023-12-03 11:52:37 27 4
gpt4 key购买 nike

我正在使用 SDL_net 套接字 API 创建服务器和客户端。我可以轻松读取字符串缓冲区,但是当我尝试发送十六进制数据时,recv 获取长度,但我似乎无法读取缓冲区内容。

IPaddress ip;
TCPsocket server,client;
int bufSize = 1024;
char message[bufSize];
int len;

server = SDLNet_TCP_Open(&ip);
client = SDLNet_TCP_Accept(server);
len = SDLNet_TCP_Recv(client,message,bufSize);

这是一个片段。缓冲区长度“ len ”已设置(即消息长度),但我无法获取消息缓冲区中的数据内容。一些样本 bind_transmitter PDU 数据由随机客户端发送到该端口的服务器。我无法读取 PDU (SMPP)。

最佳答案

我的建议是先用 tcpdump 之类的嗅探器检查线路上发生了什么。或 wireshark .检查发送的字节是否符合任何 SMPP PDU .如果没问题,然后使用 SDLNet_TCP_Recv() 转储读取的缓冲区使用 hexdump(3) 看看它是否匹配。

关于代码的一些说明:

  • 我没看到 ip在任何地方初始化,但我猜你只是在粘贴代码时跳过了那部分。
  • int bufSize = 1024; char message[bufSize];仅在 C99 中有效.假设 GCC , 总是至少用 -Wall -pedantic 编译捕捉所有警告。
  • 缓冲区在堆栈上,所以如果你把它传递给调用链上的任何函数,结果是 Undefined Behavior .

  • 我也会尝试用普通的 Berkeley sockets 重现这个,这并不比 SDL 难多少,但更有趣 :)

    关于sockets - 从 C 套接字读取十六进制缓冲区的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2466112/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com