私は、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アドレスに転送するように設定しました。
パケットが通過しない理由がわかりません。どんな考え?