• 締切済み

ネットワークプログラミングについて

今、僕はネットワークプログラミングを勉強中です 今日、linuxで教科書の例題レベルの簡単なサーバプログラムを作って それを実行させて windowsでwinsock2を用いてクライアントプログラムを作って 実行させて 同じLAN内の違うパソコンにメッセージを送るプログラムを作ったのですが なぜかconnectができません. 同じLAN内でも winsock2同士で作ったwindows同士では メッセージをうまく送れました. しかし windowsとlinuxの間だとどうしてもconnectができません なぜだか全くわかりません. windows同士, linux同士だとうまくいくようです. よろしくお願いします.

みんなの回答

  • tatsu99
  • ベストアンサー率52% (391/751)
回答No.5

>なぜだか全くわかりません. >windows同士, linux同士だとうまくいくようです. windows同士の場合、あるPCが、別のPCに接続しているのでしょうか。それとも、同じPC内で、接続しているのでしょうか。 linux同士についても、同様の質問です。

  • hegemon
  • ベストアンサー率72% (21/29)
回答No.4

>#3 WindowsもLinuxも、一般的な環境はインテルアーキテクチャなので、内部的なバイトオーダーは一緒だと思います。 が、ネットワークでつながる相手が常に同じアーキテクチャとは限りませんから、どちらかがデフォルトでリトルエンディアンに変換している、ということはありえますね。

  • chie65535
  • ベストアンサー率43% (8525/19376)
回答No.3

送受信しているネットワークデータのバイトオーダーの整合性は取れていますか? つまり、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/1415)
回答No.2

そもそもネットワーク接続できる状態なのでしょうか? pingとか、FTPとかで試してみましたか? 「同じLAN内」というだけでは繋がる保証はありません。 また、セキュリティの設定などで、特定の所からしか接続を 受け付けないようになっている場合もあります。 接続に問題無いようなら、WireSharkのようなツールでパケットを モニタしてみては如何でしょうか。

  • hegemon
  • ベストアンサー率72% (21/29)
回答No.1

>windowsとlinuxの間だとどうしてもconnectができません APIに渡してるパラメータや、実際に送受信しているデータがわからないので、このままでは有益な回答は得られないと思います。 下記のサイトなどを参考に、渡しているパラメータや関数の戻り値などを調べてみてはどうでしょうか? http://www.ibm.com/developerworks/jp/linux/library/l-sockpit/index.html

関連するQ&A

  • ネットワークプログラミングについて

    過去ログを検索してみて質問:socの秀和システム出版の「Javaネットワークプログラミング」に載っているクライアント・サーバ型のチャットプログラムについての質問がありました。 私も同じ本で学習しているのですが、過去ログの方の例では1台で実行した場合、2台でネットワーク経由で実行した場合両方とも成功していました。 このプログラムをコンパイルして実行してみてもサーバーに接続できませんと出ます。このプログラムを実行するにはどのような環境、コマンド等が必要でしょうか? 私が試している環境はJ2SDKでWindowXP一台でコマンドプロンプトでchatsv.javaとchatcl.java(アプレット)の両方をコンパイルし、chatsvを実行。chatclはHTMLファイルを作り、それを実行するとIPアドレスを指定画面が出るので指定します。通信はSocket通信です。WindowsのIPアドレス(自分)にはpingもしっかり通っています。 あと2台でネットワークを介した起動では、クライアントには上記のWindowsを、fedora core3を使ってサーバープログラムを起動。こちらも同様にchatsvを実行し、apacheにchatcl.htmlを組み込んでいます。windos側、fedora側から実行しても接続できません。こちらもwindowsからIPアドレスを直接指定するとチャットアプレットは見ることはできますし、pingも通ります。 長くなってしまいましたが、よろしくお願いいたします。

    • ベストアンサー
    • Java
  • ネットワークプログラミングを勉強しようとしているのですが。

    プログラミング初心者です。 C言語でWindowsプログラミングを一応学び、それを利用してゲームを作るのと平行してネットワークも勉強しようと思っています。 使おうとしている書籍は"UNIXネットワークプログラミング入門"という書籍で、初めてネットワークプログラミングを勉強しようとしています。 そこでその本の第二章(p32)のチャットプログラムを動作させようとしたのですがうまくできません。ソースコードはhttp://www.gihyo.co.jp/books/support.php/4-7741-1754-4 に置いてあるフォルダのchap2というフォルダにあるコードです。 まずcygwinでサーバのプログラムを動作させてから、cygwinをもう一つ起動させてそちらでクライアントのプログラムを動作させればいいと書いてあると「思う」のですが、動作しません。クライアントのプログラムを動作させても「gethostbyname: Operation not permitted」というメッセージが出て終了してしまいます。 もし、同じ本を使ったことがある方、またはそうでなくても超初心者がしてしまうような間違いや手順足らずなことなどに心当たりがあれば教えて下さい。

  • ネットワークプログラミングを勉強しようとしているのですが。

    プログラミング初心者です。 C言語でWindowsプログラミングを一応学び、それを利用してゲームを作るのと平行してネットワークも勉強しようと思っています。 使おうとしている書籍は"UNIXネットワークプログラミング入門"という書籍で、初めてネットワークプログラミングを勉強しようとしています。 そこでその本の第二章(p32)のチャットプログラムを動作させようとしたのですがうまくできません。ソースコードは​http://www.gihyo.co.jp/books/support.php/4-7741-1754-4​ に置いてあるフォルダのchap2というフォルダにあるコードです。 まずcygwinでサーバのプログラムを動作させてから、cygwinをもう一つ起動させてそちらでクライアントのプログラムを動作させればいいと書いてあると「思う」のですが、動作しません。クライアントのプログラムを動作させても「gethostbyname: Operation not permitted」というメッセージが出て終了してしまいます。 もし、同じ本を使ったことがある方、またはそうでなくても超初心者がしてしまうような間違いや手順足らずなことなどに心当たりがあれば教えて下さい。

  • ネットワークプログラミングにおいてsendto()ってブロックするの??

    C言語でネットワークプログラミング(ストリーミングのプログラムを作成しました) UDPを使用したプログラミングなのですが、サーバ側でデータを送るのが途中でいったん停止することがあるんです。数秒停止してまた送る。 もしクライアント側で何か処理が止まったときに、 ソケットのsendto(。。。。。)がブロックするのであればそのエラーもなっとくいくのですが。 sendtoってブロックするのでしょうか?? recvfrom()はソケットディスクリプタに応答があるまでブロックするのはわかるのですが・・・。sendtoはお構いなしに送信するんだったと思うのですが。 環境はサーバ、クライアントマシンともにlinux7.2です。

  • ネットワークプログラミングで困っています。

    こんにちわ。 今度ネットワーク対戦型ゲームをJavaで作成することになり、現在、それに向けていろいろと勉強しています。その一環として、オンラインチャットのプログラムを文献から見つけてネット上で動かしてみようと思い、いざ実際にやってみました。自分はPCを二台持っていて、一台はASUS製のモバイルノート(UL20A)でOSはWindows7 Home Premium (64bit板)で、もう一台はDell製のホームノート?(Stdio)でOSはWidows Vista Ultimet (32bit版)です。実行したところ、Stdioの方では問題なく動くのですが、UL20Aの方では最後まで動きませんでした。swingを使っていて、画面までは出ますが、そこからネットワークにつなごうとすると停止します。 作成したプログラムは、最初に実行したときにサーバ名を決めてサーバを構築し、その後もう一度実行して、クライアントとなってサーバ名を入力し、その後ニックネームをつけてチャット部屋(?)に入るというものです。これだけですので一台でも一応実行可能です。 細かいプログラムは文献を参考にしていますので、申し訳ありませんがここでは割愛させていただきます。 ちなみに二台とも環境はjdk1.6.0_22で、綜合開発環境のeclipseを使っているのでプログラム自体にはミスはないと思います。そこは文献を参考にして、実際にStdioで動いているので多分大丈夫です。そして同じプログラムをUL20Aで動かそうとすると動かないのです。 さらに、知人のPCを借りて同じプログラムを起動してみたら起動しました。レッツノートのWindowsXP(32bit版)でした。 これらから推測するにどうやらUL20AのPC内の環境が原因ではないかと思っています。 実際にほかのネットワーク関係のプログラムを実行するとやはりUL20Aのみ実行できませんでした。ネットワークが関係ないものは問題なく動くのですが。 そこを調べようと思いいろいろと試行錯誤しましたが、いまいち解決策らしいものが見つからなかったので、この場を使わせていただきました。 個人的にはOSが64bit版である事になにか原因があるのでは?と思っています。 本番のゲーム作成までそこまで時間があるわけではなく、モバイルノートでネットワークプログラミングができないとなるとなかなかの痛手なので、こちらの道に精通している方がいらっしゃったらどうか助言ください。

  • ネットワークプログラミングについて

    C言語のネットワークプログラミングについて質問です。 UDPで通信を行う際に、daytimeクライアントとサーバの変更する必要がある所はどこになるのでしょうか?  また、どのようなヘッダや関数になるのでしょうか?

  • Macでのソケットプログラミング(ネットワークプログラミング)

    Macでネットワークプログラミング(UNIXベースのため)をしようと思っているのですが、サーバプログラムを作り実行したところ、「bind : Can't assign requested address」と出てしまい、実行することができません。 コンパイル時にエラーは出なかったので、プログラム自体にミスはないと思います。 ちなみにOSのバージョンはOS X Tiger 10.4.6です。 どなたか詳しい方、教えて下さい。

  • C言語におけるIPv6ネットワークプログラミングについて

    はじめまして。IPv6について勉強中の者です。 今、C言語のIPv6ネットワークプログラミングの勉強しています。 まずは、簡単なプログラムを利用してみようと思い、本やインターネ ットに載っていたサンプルプログラムを持ってきて、実行してみまし た。 コンパイルをしてもエラーは出ないのですが、実行しても画面に何も 出てきません。 原因が分からなくて困っています。誰か分かる方がいらっしゃれば、 是非教えてください。 実験環境は以下のとおりです。 -- ホストA -- 【OS】fedora 8 【IPv6アドレス】リンクローカルアドレス 【プログラム名】server.c -- ホストB -- 【OS】fedora 9 【IPv6アドレス】リンクローカルアドレス 【プログラム名】client.c ホストA、ホストBは同一ネットワーク内で使用しています。ping6 でお互いに通信ができている確認をとれている状態です。 ホストAでserver.cを実行すると、クライアントからのアクセスを 待っているのですが、ホストBでclient.cを実行しても、どちらの コンピュータの画面も変化はありません。 プログラムは正しくできていると思います。 大変少ない情報ですが、何か原因が分かる方がいらっしゃれば、教え てください。 また、何でも良いのでアドバイスがあれば、よろしくお願いします。

  • ネットワークプログラミングの初歩

    ネットワーク上で動くプログラムを作りたいと思い、いろいろ調べてみたのですが何からはじめたらいいのか分からない状態です。調べているとWinSockやTCP/IP等々いろいろ言葉が出てきて聞いたことはあるけど実際にはどれを使えばいいのか悩んでしまいます。 まずは以前に作ったオセロをLANで対戦できるようにしてみたいのですが、アドバイス等よろしくお願いします。 また、参考になるサイトがありましたら教えてください。 WindowsMe VC++6.0 SDK

  • C言語でチャットプログラミングを・・・

    C言語(unix環境)でチャットプログラミングを作りたいのですが、まずは、TCP/IPによるマルチクライアントで簡単なメッセージのやりとりができるプログラムを練習として作りたいと考えています。 そこでサーバにクライアントからメッセージが届いた時点で全クライアントにメッセージを送信(write)し、逐次更新されるようにしたいのですが、クライアント側で常にread関数を呼び出すのは非常に不格好だし、メッセージを入力するといった他の処理ができなくなると思うのです。 何か方法はありますでしょうか? なにぶんネットワークプログラミングは始めたばかりですので初心者向けの解説をお願いします。