-1

Linuxでクライアントを作成して、UDPパケットの送信を許可しようとしています。これまでのところ、プログラムはすべての部分を正しく形成しているように見えますが、データを送信しようとすると、プログラムはパケットを送信できません。

ここにコードを配置しました。コードからの出力例は次のとおりです。

jeremiah @ ubuntu:〜/ Documents / Networking 2 / Lab3 / client $ sudo ./a.out 192.168.1.128 22222
大成功
ソビエト帝国同志:SVN-> sin_family:2
ソビエト帝国同志:SVN-> sin_port:52822
ソビエト帝国同志:SVN-> sin_addr:-2147374912
注意同志:メッセージを入力してください:赤


帝国ソビエト同志:パケットダンプのデータ:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
帝国ソビエト同志:UPCのサイズは1576です
帝国ソビエト同志:ソケット:3
帝国ソビエト同志:UPC->フラグ:1
帝国ソビエト同志:UPC->オフセット:0
ソビエト帝国同志:UPC->長さ:8
ソビエト帝国同志:UPC->ファイル名:赤
帝国ソビエト同志:UPC->データ:000000000000000000000000000000000000000000000000000000000000000000000000000000000000
帝国ソビエト同志:UPC->データ:000000000000000000000000000000000000000000000000000000000000000000000000000000000000
帝国ソビエト同志:UPC->データ:000000000000000000000000000000000000000000000000000000000000000000000000000000000000
帝国ソビエト同志:UPC->データ:000000000000000000000000000000000000000000000000000000000000000000000000000000000000
帝国ソビエト同志:UPC->データ:000000000000000000000000000000000000000000000000000000000000000000000000000000000000
帝国ソビエト同志:UPC->データ:000000000000000000000000000000000000000000000000000000000000000000000000000000000000
帝国ソビエト同志:UPC->データ:000000000000000000000000000000000000000000000000000000000000000000000000000000000000
帝国ソビエト同志:UPC->データ:000000000000000000000000000000000000000000000000000000000000000000000000000000000000
帝国ソビエト同志:UPC->データ:000000000000000000000000000000000000000000000000000000000000000000000000000000000000
帝国ソビエト同志:UPC->データ:000000000000000000000000000000000000000000000000000000000000000000000000000000000000
帝国ソビエト同志:UPC->データ:000000000000000000000000000000000000000000000000000000000000000000000000000000000000
帝国ソビエト同志:UPC->データ:000000000000000000000000000000000000000000000000000000000000000000000000000000000000
帝国ソビエト同志:UPC->データ:000000000000000000000000000000000000000000000000000000000000000000000000000000000000
帝国ソビエト同志:UPC->データ:000000000000000000000000000000000000000000000000000000000000000000000000000000000000
帝国ソビエト同志:UPC->データ:000000000000000000000000000000000000000000000000000000000000000000000000000000000000
帝国ソビエト同志:UPC->データ:000000000000000000000000000000000000000000000000000000000000000000000000000000000000
帝国ソビエト同志:UPC->データ:000000000000000000000000000000000000000000000000000000000000000000000000000000000000
ソビエト帝国同志:UPC->データ:0000000000000000000000000000000000000000
ソビエト帝国同志:sizeof(UPC):8
帝国ソビエト同志:sockaddr.sin_family:2
帝国ソビエト同志:sockaddr.sin_port:52822
帝国ソビエト同志:sockaddr.sin_addr.s_addr:-2147374912
ソビエト帝国同志:sizeof(sockaddr):8
帝国ソビエト同志:パケットダンプのデータ:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: : 終わり


帝国ソビエト同志:size_sent:-1
Alert Comrade:データが送信されていません:無効な引数

エラーなしで完全にコンパイルされますが、printf関数でのキャストによる警告があります。どんな助けでも大歓迎です。

4

1 に答える 1

1

これは本当に疑わしいです:

int size_sent = sendto(SOCKET, UPC, sizeof(UPC)+2*MAX_MESSAGE, 0, 
                       (struct sockaddr*) &TARGET, sizeof(TARGET)+2*MAX_MESSAGE);

メッセージの長さと sockaddr 構造体のサイズの両方に 2 * MAX_MESSAGE を追加するのはなぜですか? 最後はおそらくあなたのsendto()呼び出しが -1 を返す理由です。

また、 sizeof(UPC) は、希望するものではなく、4 または 8 になることに注意してください。

于 2012-04-24T14:08:31.197 に答える