首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >C中的UDP侦听器未输出正确的十六进制信息

C中的UDP侦听器未输出正确的十六进制信息
EN

Stack Overflow用户
提问于 2018-06-09 02:15:28
回答 1查看 59关注 0票数 0

我正在尝试侦听一个特定的端口(6053),并且我想打印通过该端口传入的所有数据。但是我似乎不能让我的程序正确运行,它输出错误的数据/不正确的数据,因为它与wire shark出来的数据不匹配。如果任何人对我应该前进的方向有任何意见或建议,我将不胜感激!

    #include "stdafx.h"
    #include <stdio.h>
    #include <stdlib.h>
    #include <WinSock2.h>
    #include <winsock.h>
    #include <string.h>
    #include <sys/types.h>
    #include <assert.h>

int main(void) {
sockaddr_in si_me, si_other;
int s;
assert((s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) );//!= -1
int port = 6053;
int broadcast = 1;

setsockopt(s, SOL_SOCKET, SO_BROADCAST,
    (const char * )&broadcast, sizeof broadcast);

memset(&si_me, 0, sizeof(si_me));
si_me.sin_family = AF_INET;
si_me.sin_port = htons(port);
si_me.sin_addr.s_addr = INADDR_ANY;

assert(::bind(s, (sockaddr *)&si_me, sizeof(sockaddr)) );//!= -1

while (1)
{
    char buf[10000];
    int slen = sizeof(sockaddr);
    recvfrom(s, buf, sizeof(buf) - 1, 0, (sockaddr *)&si_other, &slen);

    printf("recv: %x\n", buf);
}

}

EN

回答 1

Stack Overflow用户

发布于 2018-06-09 02:56:10

首先,您没有检查recvfrom的返回结果,因此您的buf数组可能包含与您所描述的完全相同的错误数据/不正确数据。你能检查一下MSDN文档吗,例如(或任何其他从手册中提取的文档),因为它包含一个很好的起点:https://msdn.microsoft.com/en-us/library/windows/desktop/ms740120(v=vs.85).aspx

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50766341

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档