- ベストアンサー
ソケット通信(サーバ側)について
環境:Windows2000とWindows2000(サーバに見立てて) WinScok2にてサーバソケットAPを作ったのですが、 クライアントからの接続でタイムアウトエラーになります。 以前にPC側APとサーバAPでポートが同じでなければいけないと言われ修正したのですが、まだ接続できません。 以前の方にも言われたのですが、サーバAPを起動後にプロンプトからtelnet (リスンされたIP) (ポート番号)で起動すると、接続に失敗しました。とメッセージが表示されます。 サーバAPはaccept()で待っている状態です。 何か洩れている箇所があるのでしょか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>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
その他の回答 (2)
- hiroyapapa
- ベストアンサー率45% (17/37)
まずは、サーバ側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または、クライアントマシンとサーバマシンを繋いでいる部分です。(ハード的に部分とソフト的な部分があります。) 参考まで。
お礼
ありがとうございます。 ポート番号が違うため、接続できませんでした。
- ranx
- ベストアンサー率24% (357/1463)
待つのはlisten()では?
補足
デバックで見る限りではacceptのような気がします。
お礼
ありがとうございます。 ポート番号が違うため、接続できませんでした。