2011-01-31 12 views
0

私は自分のPC上で実行している単純なクライアントと私のhtc欲望アンドロイド2.2で簡単なクライアントを持っています。簡単なアンドロイドクライアントとPCサーバーを取得する方法

サーバーとクライアントはどちらも同じポートを使用します。私はクライアントのコードにサーバーのIPをハードコードします。私はAndroid上でクライアントを経由して実行しているサーバーに接続しようとすると、クライアントは、この例外がスローされます。

クライアントコード

InetAddress addr; 
    Socket socket = null; 

    byte [] ipAddress = new byte[] {(byte)82,(byte)168,(byte)175,(byte)141}; 

    try{ 

    addr = InetAddress.getByAddress(ipAddress); 

    socket = new Socket(addr, 1234); 
    System.out.println("socket = "+socket); 

    BufferedReader in = new BufferedReader(
      new InputStreamReader(
      socket.getInputStream())); 

    PrintWriter out = new PrintWriter(
      new BufferedWriter(
      new OutputStreamWriter(socket.getOutputStream())),true); 

     out.println("hello"); 
     socket.close(); 
    } catch (UnknownHostException e) { 
    System.out.println("UnknownHostException ...: "+e); 
    } catch (IOException e) { 
    System.out.println("IOException ...: "+e); 
    } 

:ここ

IOException ...: java.net.SocketException: The operation timed out. 

は、クライアントとサーバーのコードの一部であります、

サーバコード

ServerSocket ss = new ServerSocket(PORT); 
    System.out.println("Started:"+ss); 

    try{ 
    //block until a connection occures 
    Socket socket = ss.accept(); 

    try{ 
    System.out.println("Conncetion accepted:"+socket); 
    InputStream IS = socket.getInputStream(); 
    InputStreamReader ISR = new InputStreamReader(IS); 
    BufferedReader in = new BufferedReader(ISR); 

    OutputStream OS = socket.getOutputStream(); 
    OutputStreamWriter OSR= new OutputStreamWriter(OS); 
    BufferedWriter BW = new BufferedWriter(OSR); 
    //output automatically flushed by PrintWriter 
    PrintWriter out = new PrintWriter(BW,true); 

    while(true){ 
    String str = in.readLine(); 
    System.out.println("Client: "+str); 
    out.println("hi"); 
    } 
    }finally{ 
    System.out.println("Closing..."); 
    socket.close(); 
    } 
    }finally{ 
    ss.close(); 
    } 

このコードはWi-Fiを使用していますが、3gでは使用できません。

何か助けを歓迎しています...事前に感謝します。

答えて

3

おそらくルータ/無線アクセスポイントを使用してインターネットに接続していますか?

ルーターでNAT protocolを使用している場合、インターネット上のどのデバイスでも、お使いのPCにconnectioを開くことができません。 NATは、PCにインターネットへの接続を許可し、その逆も許可しません。

携帯電話が無線LANに接続されている場合、同じネットワーク上にありNATが使用されていないため、PCに接続できます。お使いの携帯電話が3g以上、したがってインターネットの場合、あなたの電話とあなたのPCの間にNATがあるよりも。

ソリューション:あなたのPCにこの接続を転送するルータのIPにアプリを接続するよりも、

は、ルーターのポートフォワーディングを有効にします。

+0

げんこ、ご返信ありがとうございます。つまり、NATが存在する場合、tcp接続はありません。それとも解決策がありますか? – mnish

+0

NATはインバウンド(inet-to-PC)接続を許可しません。これに対する解決策はポート転送です。 –

関連する問題