c - C中的UDP侦听器未输出正确的十六进制信息
问题描述
我正在尝试侦听特定端口(6053),并且我想打印通过该端口的所有数据。但我似乎无法让我的程序正确运行,它输出错误数据/错误数据,因为它与来自线鲨的数据不匹配。如果有人对我应该前进的方向有任何意见或建议,将不胜感激!
#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);
}
}
解决方案
首先,您不检查 的返回结果recvfrom
,因此您的buf
数组可能包含与您描述的完全相同的错误数据/不正确数据。您能否检查 MSDN 文档,例如(或任何其他 recvfrom 手册),因为它包含一个很好的起点:
https ://msdn.microsoft.com/en-us/library/windows/desktop/ms740120(v=vs.85 ).aspx
推荐阅读
- php - 为什么我在一小时后得到 403 Forbidden (Laravel)
- php - conditional doing both the if and else statement
- macos-high-sierra - NSAlert 键盘事件传播
- r - create a coefficient matrix based on a formula using elements of a data frame in R
- php - 为什么类别名称和 ID 没有进入插件选项页面?
- database - ReasonML sample web server with a db
- matlab - Plotting Eye Diagram from ADS Data in MATLAB
- javascript - 点击下拉菜单上的 JQuery / Bootstrap 日期选择器
- sparql - Prefered rank in Wikidata not working properly for population in some cases?
- ios - 二元运算符“==”不能应用于“字符串”和“UInt32”类型的操作数