

## 現状の問題点

ノート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ウェイハンドシェイクは成功


CC BY-SA 4.0
2018-06-21T09:26:43.667
44953
2018-06-21T18:58:54.790
29032
question
c++ socket boost
ソケット通信のエラーについて


問題切り分けのためには、シンプルな環境を用意して、  
1つ1つ考えられる原因を潰していくのが良いと思います。

物理的に以下のような構成になっているのだと思いますので、

[code]

    ノートPC - ルータ - デスクトップPC
    
[/code]

考えられそうな主な原因は、以下だと思いました。

  * 1) クライアントアプリ,サーバーアプリの設定誤りやバグなど
  * 2) OS内で、他のアプリがポートを使用済み  
(netstatなどで確認できます。)

  * 3) OS内でファイアウォール、セキュリティソフトが通信を遮断  
(ファイアウォールやセキュリティソフトを無効かすることで確認できます。)

  * 4) ルータが通信を遮断

問題切り分けのためには、  
ルータが影響しない環境(ノートPCとデスクトップPCをハブにつなぐなど..)を用意し、  
通信ができるか確認する必要があると思います。  
この環境で、通信できない場合は、1)〜3)が原因ではないか確認してください。

この環境で問題なく通信ができれば、  
4)が原因だと思いますので、ルータの設定を確認してください。


CC BY-SA 4.0
2018-06-21T18:58:54.790
44972
2018-06-21T18:58:54.790
44953
answer