繁体   English   中英

从C程序中写入ip地址的最简单方法是什么?

[英]What is the simplest way to write to an ip address from within a C program?

我正在升级用C编写的过滤程序。该程序用于从串口接收数据流,稍微修改一下; 然后将其发送到tcp到rs485无线隧道的ip地址。 目前该程序依赖于shell脚本的i / o重定向 - 它的引发方式如下:

./packetfilter </dev/ttyS4 >/dev/tcp/10.0.50.101/4660  

shell免费提供tcp / ip。 现在我需要stderr和stdout。
将串行数据写入网络地址的最简单方法是什么?

在C中打开套接字非常容易,但是你发现的大多数代码都使用丑陋的,不赞成使用的方法,这使得它看起来很难。 这是正确的方法:

struct addrinfo *ai;
int fd;
if (getaddrinfo(host_string, port_string, 0, &ai)) goto failed;
fd = socket(ai->ai_family, SOCK_STREAM, 0);
if (connect(fd, ai->ai_addr, ai->ai_addrlen)) goto failed2;

填写错误处理。

您需要将IP地址拆分为“点”,并形成一个32位整数(假设您只担心IPV4 - 如果是IPV6,那么您还有更多的工作要做......)。

每个“点”数将成为你的IP地址中的一个字节 - 所以在十六进制中,你的示例中的地址将变为0x0A003265

(0x0A = 10,00 = 0,0x32 = 50,0x65 = 101,如果我没搞砸)

然后传递32位整数throputh,htons功能使其“按正确的”(网络)顺序(htons从主机转换为网络字节顺序)。 将结果插入您的插座,您就完成了所有设置。

重定向到更高的FD,然后使用write(2)

./packetfilter </dev/ttyS4 3>/dev/tcp/10.0.50.101/4660  

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM