質問: 現状の問題点 ------ ノートPCとデスクトップPC間でソケット通信を行い,動画転送のアプリケーションを作成しています.仕組みの都合上,サーバは常に待機状態,クライアントは設定したタイミングでサーバに接続要求し,接続後にデータを送ります.クライアントをデスクトップPC,サーバをノートPCにしているのですが,ソケット通信接続の段階でエラーが起こってしまいます.同じような現象を経験した方がいましたらご教授お願い致します. 環境 -- * ノートPC:Surface, Windows8 * デスクトップPC:DELL, Windows7 * ルータ:Cisco * 言語:C++,Boost Library (asioなど使用) * ファイアウォール:Off * F-Secure エラーメッセージ -------- 「対象のコンピュータによって拒否されたため、接続できませんでした」 試したこと ----- * 役割が逆,すなわちノートPCがクライアントであればこの問題は回避できることを確認 * 自作アプリではなく,Apacheサーバを立てて同じことをやった.結果,ノートPC側がサーバになる場合デスクトップPCからアクセスできなかった. * Wiresharkで上記Apache作戦を実行時のパケットを見たが,3ウェイハンドシェイク時の**ノートPC側(サーバ)からのACK**が届いていない.ノートPCがクライアントの場合は3ウェイハンドシェイクは成功
回答: 問題切り分けのためには、シンプルな環境を用意して、 1つ1つ考えられる原因を潰していくのが良いと思います。 物理的に以下のような構成になっているのだと思いますので、 ``` ノートPC - ルータ - デスクトップPC ``` 考えられそうな主な原因は、以下だと思いました。 * 1) クライアントアプリ,サーバーアプリの設定誤りやバグなど * 2) OS内で、他のアプリがポートを使用済み (netstatなどで確認できます。) * 3) OS内でファイアウォール、セキュリティソフトが通信を遮断 (ファイアウォールやセキュリティソフトを無効かすることで確認できます。) * 4) ルータが通信を遮断 問題切り分けのためには、 ルータが影響しない環境(ノートPCとデスクトップPCをハブにつなぐなど..)を用意し、 通信ができるか確認する必要があると思います。 この環境で、通信できない場合は、1)〜3)が原因ではないか確認してください。 この環境で問題なく通信ができれば、 4)が原因だと思いますので、ルータの設定を確認してください。