• ベストアンサー

ソケット通信(サーバ側)について

環境:Windows2000とWindows2000(サーバに見立てて) WinScok2にてサーバソケットAPを作ったのですが、 クライアントからの接続でタイムアウトエラーになります。 以前にPC側APとサーバAPでポートが同じでなければいけないと言われ修正したのですが、まだ接続できません。 以前の方にも言われたのですが、サーバAPを起動後にプロンプトからtelnet (リスンされたIP) (ポート番号)で起動すると、接続に失敗しました。とメッセージが表示されます。 サーバAPはaccept()で待っている状態です。 何か洩れている箇所があるのでしょか?

質問者が選んだベストアンサー

  • ベストアンサー
  • MovingWalk
  • ベストアンサー率43% (2233/5098)
回答No.2

>PC側APとサーバAPでポートが同じでなければいけないと言われ そんなことはないですよ。 Listenポートは指定しますが、クライアント側は、OSから割り当てられたものを 使うのが普通のやり方です。そうしないと困ることがあるはずです。 (Webサーバを稼動させていると、Webクライアントになれないとか...) >telnet (リスンされたIP) (ポート番号)で起動すると、接続に失敗しました accept以前に問題がありそうですね。 ソケットの生成(socket)、バインド(bind)、listen でエラーは出ていませんか? http://www.katto.comm.waseda.ac.jp/~katto/Class/GazoTokuron/code/socket.html

参考URL:
http://www.katto.comm.waseda.ac.jp/~katto/Class/GazoTokuron/code/socket.html
akira_akira
質問者

お礼

ありがとうございます。 ポート番号が違うため、接続できませんでした。

その他の回答 (2)

回答No.3

まずは、サーバ側APに問題があるのか、クライアントAPに問題があるのか切り分けるのが早道でしょう。 サーバAPなるものを起動した状態で、サーバ側のコマンドプロンプトから、 netstat -a と打ってみてください。以下のようなリストが表示されるはずです。 C:\Documents and Settings\tamamori>netstat -a Active Connections Proto Local Address Foreign Address State TCP Sirius:epmap Sirius:0 LISTENING TCP Sirius:microsoft-ds Sirius:0 LISTENING TCP Sirius:1025 Sirius:0 LISTENING TCP Sirius:1027 Sirius:0 LISTENING TCP Sirius:3541 Sirius:0 LISTENING TCP Sirius:5000 Sirius:0 LISTENING   :   :   : このリストに、あなたのサーバAPがlistenしているはずのポート番号は表示されていますか? (注意:80などのwelknown portは、httpなどのようにプロトコル名で表示されます。) ここまでOKなら、サーバAPは目的通り、accept()待ちになっていると考えて良いでしょう。 次に、同じくサーバ側のコマンドプロンプトから、 telnet localhost ポート番号 と打ってみてください。 つながりますか? というか、繋がるはずです。 ここまできたら、疑うのはクライアント側APまたは、クライアントマシンとサーバマシンを繋いでいる部分です。(ハード的に部分とソフト的な部分があります。) 参考まで。

akira_akira
質問者

お礼

ありがとうございます。 ポート番号が違うため、接続できませんでした。

  • ranx
  • ベストアンサー率24% (357/1463)
回答No.1

待つのはlisten()では?

akira_akira
質問者

補足

デバックで見る限りではacceptのような気がします。

関連するQ&A

  • ソケット通信 同じポート番号でn対1はできない?

    Windows2000クライアントが複数あり、サーバソケット用APを作成したのですが、1対1では確認できたのですが、 n対1は、手法が変わるのですか? 疑問: PCとサーバ間でのソケット通信にて、相互に同じポートでなければいけないので、複数のPCからサーバソケット用AP で決めたポートに繋げに行くことが可能なのですか?

  • 異なる言語間でのソケット通信について

    簡単なネットワークプログラムを作成して、ソケット通信の確認をしています。 クライアントとサーバが両方ともにC++の場合と、両方ともにJavaの場合で、正常に通信が行われていることは確認しました。 そこで、クライアントでC++のプログラムを動かし、サーバでJavaのプログラムを動かしてみたのですが、うまくいきませんでした。 (ポート番号を合わせたので、相互接続は出来てるみたいですが、データが渡ってきませんでした。OSはクライアント/サーバともに、Windowsです。) 言語が異なる場合の、ソケット通信について良いサイトをご存知でしたら、教えていただけないでしょうか?

    • ベストアンサー
    • Java
  • ソケット通信での再接続

    ソケット通信での再接続 ソケット通信でサーバ側は立ち上げたまま、 クライアント側を同じポート番号で 何度も再接続できるようにしたいと考えております。 http://blog.livedoor.jp/akf0/archives/51585502.html を参考にマルチスレッドを利用してプログラムを作成してみましたが 最初の起動に関してはうまくいくのですが、 クライアント側を一度終了してもう一度再接続すると、 バインドエラーが出ます。 いろいろ試してみたのですが、 どうしてもうまくいきません。 どうすればいいのでしょうか。 ご存じの方がいらっしゃればお答えいただきたいと思っております。 よろしくお願いいたします。 環境 OS:Windows XP 開発環境:Visual Studio 2008 Express Edition ソケット通信:winsock2 マルチスレッド:win32api

  • JAVAのソケット通信の接続数について

    JAVAのソケット通信の接続数について ServerSocket server= new ServerSocket( port ); server.setSoTimeout( 4000 ); Socket socket = server.accept();//クライアントからの接続をまつ 以上のコードを使っていますが、クライアントからの接続数を調べる方法はないでしょうか?

    • ベストアンサー
    • Java
  • ソケット通信(telnet)を行いたい

    現在、クライアントプログラムをアプレットで作ってます。 サーバ側はsocketで通信できる状態で、telnetで会話できます。 そこで質問なのですが、クライアント側でのsocket通信時の手順がわかりません。。 ソケットの入門書でわかったのはここまでです。 Socket s = new Socket("10.255.50.14", 23); でソケットを作るところはわかるのですが、そこからの手順がわかりません。。 ここから、connectとか使うのでしょうが、、 どなたかご存知の方がいらっしゃいましたらお教え願いたいと思います。

    • ベストアンサー
    • Java
  • クライアント サーバ(Win2000)間ソケット通信について

    クライアントの通信APLをDebugするのに、仮のサーバ(Win2000)に接続するのですが、サーバ側の通信APを どう開発していいのか?本等にはUNIXのAPのサンプルは あるのですが、WINサーバのサンプルがありません。 教えてください。

  • サーバソケットで待受ポートと違うポートで通信可能?

    192.168.0.1のTCPサーバソケットの12345ポートで待ち受けたとします。 そこに192.168.0.2の23456ポートから接続が来た場合には「192.168.0.1:12345⇔192.168.0.2:23456」というソケットが作成され、(PG次第ですが)引き続き12345ポートで待ち受けることになるかと思います。 上記例において、23456ポートから接続が来た場合に「192.168.0.1:34567⇔192.168.0.2:23456」といった、待ち受けポートと異なるポートとのソケットを作成することはできるのでしょうか? 私はできないという認識なのですが、できると言う人がいるので確認したいと思い質問します。

  • teratermとコマンドプロンプトの動作が違う

    コマンドプロンプトからできることがtelnetだとできません。 クライアント(windows7)でコマンドプロンプトからtelnetでサーバA(windows2008)に接続して、 サーバAを中継してさらにtelnetでサーバB(windows2008)に接続しています。 これをteratermでやるとサーバAには接続できるのですが、接続先のサーバAから サーバBには接続できません。なぜでしょうか。 teratermでサーバA上からtelnet 192.168.xx.xx(サーバB) とやってもプロンプトが戻ってくるだけです。 ↓こんなふうに >telnet 192.168.xx.xx >

  • ソケット通信でチャットプログラム(unix c言語)

    c言語のソケット通信でチャットプログラムを作り中です 仕様:あるクライアントからメッセージがサーバに送信された時点でサーバは接続されたいる全てのクライアントにメッセージを送信する。 以下のようにクライアントからの接続(accept)がある度に、その返り値であるファイルディスクリプタにに対するreadと全クライアントに対するwriteの処理を行うchild関数をforkで起動します。これだとforkが起動した時点での全てのファイルディスクリプタ(接続されている全クライアント)の情報をchild関数に渡せますが、それ以降増え続けていくファイルディスクリプタの情報をchild関数に渡せないので、最初の方に接続したクライアントからのメッセージをそれ以降接続した他のクライアントに送信できないという状態です。 main() {   socket()   bind()   listen()     while(1){       accept()       if(fork()==0) {        child()       }     } } child() {   select()   if(FD_ISSET()) {     read()     write()   } } ※forkやソケット通信に関してかなり初心者なので、ソースや説明分が意味不明かもしれませんがよろしくお願いします。

  • ソケット通信

    たびたびお世話になります。 CreateProcessで「cmd /C ***.bat」、 ***.batの中では vbsを動かして、telnet xxx.xxx.xxx.xxx を起動しています。 ウィンドウを表示させないように言われていますが、どうしてもtelnetが動くと、 ウィンドウが表示されてしまいます。 batのなかで、cscriptで*.vbsを読んでるからと思います。 (cscriptは画面を消せない???) なので、ソケット通信に変更してみました。 まったくウィンドウが出ないので「良し良し!」だったのですが 動かない箇所が出てきました。 例えば、ボタンが複数あって ボタンごとに「set 0」「set 1」...「set 77」 などとsend()するのですが、「set 10」以降、set の次の数字が2桁になると動かなくなってしまいました。 特にclient側ではエラーにはならなくて、サーバー側・受けとったほうで解釈できないものと思います。 サーバー側での解析はできません(ROMに焼き付けてある箱(!)なので) これって、そのままsend()してはダメでしょうか? バイトオーダーの変換???とか関係ありますか? 関係あったとしても、バイトオーダーの変換のやり方がわかりません。(;_;) (いろいろ試したけれどわかりませんでした) telnetで送るデータ、そのままなんですが、当然telnetでは ちゃんと動いています。 すみません、どんなことでも良いのでアドバイスお願いいたします。

専門家に質問してみよう