簡體   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