0

私のPCで実行されている単純なサーバーと、Android 2.2を実行しているhtcの欲求で単純なクライアントがあります。

サーバーとクライアントは両方とも同じポートを使用します。サーバーの IP をクライアント コードにハード コードします。Androidのクライアントを介して実行中のサーバーに接続しようとすると、クライアントは次の例外をスローします:

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

以下は、クライアント コードとサーバー コードの一部です。

クライアントコード

  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);
  }

サーバーコード

    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();
  }

このコードは、wifi を使用して動作していますが、3g では動作していません。

どんな助けでも大歓迎です...そして、事前に感謝します。

4

1 に答える 1

3

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

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

そのため、携帯電話が Wi-Fi に接続されている場合、両方が同じネットワーク上にあり、NAT が使用されていないため、PC に接続できます。電話が 3g に接続されている場合、つまりインターネットに接続されている場合は、電話と PC の間に NAT が存在します。

解決:

アプリでルーターの IP に接続するよりも、ルーターでポート転送を有効にして、この接続を PC に転送します。

于 2011-01-31T12:49:43.683 に答える