2017-08-16 19 views
1

私は、TCPスタジオアプリケーションをAndroidスタジオの別のモジュールとして実行しています。これは、リモートTCPパケットをリッスンしています。アプリが実行されているコンピュータは、現在ローカルエリアネットワークに接続されています。ここでインターネット経由でTCPパケットを受信する方法

TcpServer server = new TcpServer(); 
server.listenForPacket(); 

TcpServer

public class TcpServer { 

    private void listenForPacket(){ 

      try{ 
       ServerSocket welcomeSocket = 
        new ServerSocket(Constants.LOCAL_PORT); 
       Socket connectionSocket = 
        welcomeSocket.accept(); 

       // Pauses thread until packet is received 
       BufferedReader packetBuffer = 
         new BufferedReader(
           new InputStreamReader(
           connectionSocket.getInputStream())); 

       System.out.print("Packet received"); 

      } catch (IOException e){ 
       e.printStackTrace(); 
      } 
    } 
} 

である私はまた、TCPクライアントを実行している自分の携帯電話上の別々のアプリを持っています。電話機はWi-Fiをオフにしており、データ回線を介してサーバーにパケットを送信し、最終的にはインターネット経由でパケットを送信する必要があります。ここで

TcpClient client = new TcpClient(); 
client.sendPacket(); 

TcpClient

public class TcpClient { 

    private void sendTcpPacket(){ 

     try { 

      InetAddress remoteInetAddress = 
        InetAddress.getByName(Constants.PUBLIC_IP_ADDRESS); 
      InetAddress localInetAddress = 
        InetAddress.getByName(Constants.LOCAL_IP_ADDRESS); 

      int remotePort = Constants.FORWARDING_PORT; 
      int localPort = Constants.LOCAL_PORT; 

      Socket socket = 
        new Socket(remoteInetAddress, 
         remotePort, localInetAddress, localPort); 

      DataOutputStream dataOutputStream = 
        new DataOutputStream(socket.getOutputStream()); 

      byte[] packet = new byte[1]; 
      packet[0] = (byte) 255; 

      dataOutputStream.write(packet, 0, packet.length); 


     } catch (UnknownHostException e) { 

      e.printStackTrace(); 

     } catch (IOException e) { 

      e.printStackTrace(); 
     } 
    } 
} 

サーバは、クライアントから送信されたパケットを受信して​​いない、しかしです。

ここで、私の変数は正しいと思いますか?

InetAddress remoteInetAddress = 
     InetAddress.getByName(Constants.PUBLIC_IP_ADDRESS); 
InetAddress localInetAddress = 
     InetAddress.getByName(Constants.LOCAL_IP_ADDRESS); 

int remotePort = Constants.FORWARDING_PORT; 
int localPort = Constants.LOCAL_PORT; 

また、転送先ポートをローカルIPアドレスに転送するように設定しました。

パケットが通過しない理由がわかりません。どんな考え?

答えて

1
// Pauses thread until packet is received 

いいえ。

BufferedReader packetBuffer = 
    new BufferedReader(
     new InputStreamReader(
      connectionSocket.getInputStream())); 

これは単にBufferedReaderを作成します。それはI/Oを何もしません。読んでみたい場合は、read()メソッドのうち1つを呼び出す必要があります。そうでない場合は、readLine()を送信してください。

また、ソケットを閉じていません。そして、DataOutputStreamを使って送信する場合、受信するにはInputStreamを使用する必要があります。またはBufferedReaderを受信し、送信するにはWriterを使用してください。

関連する問題