2016-07-04 7 views
0

TCPListenerを使用してコンピュータでサーバーを起動するC#WPFアプリケーションと、クライアントとして動作するアンドロイドアプリケーションがあります。サーバを起動して自分のコンピュータでアプリケーションをエミュレートすると完全に機能しますが、スマートフォンを使用してコンピュータに接続すると機能しませんが、ほとんどの場合、ルータのDHCPを再起動してから何度か動作します私のスマートフォン。あなたが必要な場合はスマートフォンとコンピュータの間でソケット接続が行われません

、ここでは接続コードだ

サーバー:

private static IPAddress ipAd; 
private static TcpListener server; 
private static TcpClient client; 

public static void start() { 
    //Already tried with both 
    ipAd = IPAddress.Parse(TCPServer.GetLocalIPAddress()); 
    //ipAd = IPAddress.Parse("127.0.0.1"); 

    server = new TcpListener(ipAd, 1209); 
    client = default(TcpClient); 
    try { 
     server.Start(); 
     Console.WriteLine("Server started"); 
    } catch { 
     Console.WriteLine("Failed to start server"); 
    } 

クライアント:お時間を

Socket socket = null; 
String response = new String(); 
try{ 
    //connect This ipAddress is the same in my desktop 
    InetAddress ipAd = InetAddress.getByName(ipAddress); 
    socket = new Socket(ipAd, 1209); 
    //send 
    DataOutputStream DOS = new DataOutputStream(socket.getOutputStream()); 
    DOS.write(message.getBytes()); 
} 
... 

おかげで、私は私のコンピュータネットワークへのより多くを捧げていたはずですしましたクラス...

特定のポートをリダイレクトする必要がありますか?ルーター/ファイアウォールにいくつかの特定の設定がありますか?私は何かが足りないと思う。

+0

あなたのルータに関係することは間違いありません。あなたが失敗したら、どんなエラーが出ますか? – zapl

答えて

0

これは、あなたのデバイスがIPルーティングに関して同じネットワーク上にある場合に機能します。しかし、最もシンプルなSOHOグレードWiFiルーター/ APの一部でさえ、いわゆるイーサネットと接続された、Wi-Fiデバイス間のネットワークアクセスやクライアントへのアクセスを拒否する、いわゆるデバイス分離が可能です。

この設定を動作させるために確実に次のことを確認する必要があります。モバイルアプリケーションでのルーターの

  1. 使用する外部アドレスを。 (サーバからhttp://whatismyip.orgをブラウズすると見つかります)

  2. ルータで内部ネットワークの特定のIPに特定のポートのポート転送を設定します。

prividedソースコードについては、デフォルトの.NET実装は、最初に使用可能なIPアドレスを選択しますので、あなたではなく、サーバーアプリでバインドアドレスとして0.0.0.0を使用したい、あなたがしているではないものであってもよいですモバイルアプリ内の接続に使用するか、同じネットワークに関連しないかを選択します。このアプローチでは、複雑なネットワーク設定の場合にセキュリティと利便性(共存)の問題が発生する可能性がありますが、ほとんどの場合は問題なく機能します。

+0

どうもありがとうございます。 –

関連する問題