私は現在、ポート2368にUDPデータストリームを配信するレーザーセンサーを使っています。私はWiresharkでパケットを見ることができます。ポート2368からUDPストリームを受信できません(Linux)C
私は画像を投稿することができないんだけど、私はWiresharkのパケットのために示して何を書く:
出典:192.168.17.141 先:192.168.3.255 プロトコル:UDP 送信元ポート:HTTPS(443 ) 宛先ポート:がopentable(2368)
しかし、私は次の例のCプログラムでソケットを使用してパケットを読みたい:
int main(int argc, char *argv[])
{
int sock, n, res;
unsigned int length = 1206;
char* buffer = new char[1206];
sock= socket(AF_INET, SOCK_DGRAM, 0);
if (sock < 0) error("socket");
uint16_t udp_port = 2368;
sockaddr_in my_addr;
socklen_t len = sizeof(sockaddr_in);
memset(&my_addr, 0, sizeof(my_addr));
my_addr.sin_family = AF_INET;
my_addr.sin_port = htons(udp_port);
my_addr.sin_addr.s_addr = INADDR_ANY;
cout << my_addr.sin_family << endl;
cout << my_addr.sin_port << endl;
cout << my_addr.sin_addr.s_addr << endl;
res = bind(sock, (sockaddr *)&my_addr, sizeof(sockaddr_in));
if (res == -1)
{
perror("bind");
return -1;
}
while (true)
{
n = recvfrom(sock,buffer,1,0,NULL,NULL);
if (n < 0) error("recvfrom");
}
close(sock);
return 0;
}
PROGRをamは成功するまでrecvfrom()
になります。そこでは、ソケットはパッケージを待っていて、何も受信しません。私はWindows用の同じプログラムをWinsockで書いており、完全に機能しました。私はLinux OSに比較的新しいので、この問題を解決する方法はわかりませんし、アドバイスに感謝しています!
追加情報:I手動ETH4にIPとネットマスク(これはデバイスが接続されているインタフェースである)以下の割り当て:
IP:192.168.3.5 NM:255.255.255.0
あなたのプログラムは、C++クラスiostreamの一部である 'cout'変数を使用するので、CではなくC++です。 –
192.168.3.255はネットマスク255.255.255.0のブロードキャストアドレスになります。通常、SO_BROADCASTソケットオプションを有効にしてこれらのパケットを受信する必要があります。しかし192.168.17.141がマシンに送信された場合、/ 24ネットワークのブロードキャストアドレスに送信することはできませんので、ここでネットマスクとのミックスアップが必要です。 – nos
1オクテットサイズのパケットが必要ですか? – wildplasser