- 締切済み
ネットワークプログラミングについて
今、僕はネットワークプログラミングを勉強中です 今日、linuxで教科書の例題レベルの簡単なサーバプログラムを作って それを実行させて windowsでwinsock2を用いてクライアントプログラムを作って 実行させて 同じLAN内の違うパソコンにメッセージを送るプログラムを作ったのですが なぜかconnectができません. 同じLAN内でも winsock2同士で作ったwindows同士では メッセージをうまく送れました. しかし windowsとlinuxの間だとどうしてもconnectができません なぜだか全くわかりません. windows同士, linux同士だとうまくいくようです. よろしくお願いします.
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- tatsu99
- ベストアンサー率52% (391/751)
>なぜだか全くわかりません. >windows同士, linux同士だとうまくいくようです. windows同士の場合、あるPCが、別のPCに接続しているのでしょうか。それとも、同じPC内で、接続しているのでしょうか。 linux同士についても、同様の質問です。
- hegemon
- ベストアンサー率72% (21/29)
>#3 WindowsもLinuxも、一般的な環境はインテルアーキテクチャなので、内部的なバイトオーダーは一緒だと思います。 が、ネットワークでつながる相手が常に同じアーキテクチャとは限りませんから、どちらかがデフォルトでリトルエンディアンに変換している、ということはありえますね。
- chie65536(@chie65535)
- ベストアンサー率44% (8800/19959)
送受信しているネットワークデータのバイトオーダーの整合性は取れていますか? つまり、ntohl、ntohs、htonl、htons 関数をちゃんと使っていますか? http://cai.int-univ.com/sugsi/Lecture/NetProg/chapter3/byte_order.html 当然ながら「サーバプログラムも、クライアントプログラムも、どっちも ntohl、ntohs、htonl、htons 関数をちゃんと呼ばなきゃダメ」です。 >windowsとlinuxの間だとどうしてもconnectができません >なぜだか全くわかりません. >windows同士, linux同士だとうまくいくようです. windows 同士、linux 同士では、多分、バイトオーダーが同じになっているので、バイトオーダーの整合性を取らなくても「バイトオーダーが同じだから、一見、問題が無いかのように動いてしまう」でしょう。 しかし、そのプログラムは、ローカルなバイトオーダーのデータをそのままネットワークに垂れ流しているので、バイトオーダーが異なる同士では動きません。つまり >windowsとlinuxの間だとどうしてもconnectができません と言う事が起きる可能性があります。
- nda23
- ベストアンサー率54% (777/1416)
そもそもネットワーク接続できる状態なのでしょうか? pingとか、FTPとかで試してみましたか? 「同じLAN内」というだけでは繋がる保証はありません。 また、セキュリティの設定などで、特定の所からしか接続を 受け付けないようになっている場合もあります。 接続に問題無いようなら、WireSharkのようなツールでパケットを モニタしてみては如何でしょうか。
- hegemon
- ベストアンサー率72% (21/29)
>windowsとlinuxの間だとどうしてもconnectができません APIに渡してるパラメータや、実際に送受信しているデータがわからないので、このままでは有益な回答は得られないと思います。 下記のサイトなどを参考に、渡しているパラメータや関数の戻り値などを調べてみてはどうでしょうか? http://www.ibm.com/developerworks/jp/linux/library/l-sockpit/index.html