Java-клиент не формирует сокет с удаленным приложением Android на сервере TCP - PullRequest
1 голос
/ 10 апреля 2019

Я могу использовать клиент TCP для отправки текста на сервер TCP, когда мой хост является локальным хостом, но я не могу отправлять текст с клиента на сервер, когда клиент и сервер находятся на разных хостах или компьютерах в моей сети, потому что сокетне может быть создан.Отказ в подключении*, в соединении не отказано, данные передаются

String host = "127.0.0.1";
//String host = "10.9.2.121";
int port = 5000;

String sentenceToServer = "hello server";
System.out.println("initializing socket");

Socket clientSocket = new Socket(host, port);

System.out.println("socket initialized");
System.out.println("getting output stream to server");
DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream());
System.out.println("found output stream to server");
System.out.println("getting input stream from server");
BufferedReader inFromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
System.out.println("found input stream from server");
System.out.println("writing sentence to server");
outToServer.writeBytes(sentenceToServer+"\n" );
System.out.println("sentence written");
System.out.println("waiting for sentence response from server");
String serverResponse = inFromServer.readLine();
System.out.println("serverResponse = "+serverResponse);
System.out.println("socket closed");
clientSocket.close();

, и вот мой сервер также работает на локальном хосте 127.0.0.1

try
{

 String clientSentence;
 welcomeSocket = new ServerSocket(6000);
 welcomeSocket.setReuseAddress(true);

 while ( true )
 {
    Log.d("TAG", "looking for socket");
    Socket connectionSocket = welcomeSocket.accept();
    Log.d("TAG", "socket accepted");
    Log.d("TAG", "getting input stream");
    BufferedReader inFromClient = new BufferedReader(
          new InputStreamReader(connectionSocket.getInputStream()));
    Log.d("TAG", "input stream found");
    Log.d("TAG", "getting output stream");
    DataOutputStream outToClient = new DataOutputStream(connectionSocket.getOutputStream());
    Log.d("TAG", "output stream found");
    Log.d("TAG", "reading input stream");
    clientSentence = inFromClient.readLine();
    Log.d("TAG", "input stream read");
    Log.d("TAG", "input = " + clientSentence);
    Log.d("TAG", "writing output back to client");
    clientSentence = "hello client";
    outToClient.writeBytes(clientSentence + "\n");
    Log.d("TAG", "output written back to client");
 }
}
catch ( IOException e )
{
 e.printStackTrace();
}

, но если сервер работает на другой машине10.9.2.121 а не 127.0.0.1 там, где работает клиент, сокет не создается.

Также обратите внимание, что сервер работает в приложении Android, и порт был переадресован с помощью telnt

telnet localhost 5554

и для подтверждения, что приложение Android прослушивает порт 6000, когда я перенаправляю с помощью telnet

redir add tcp:5000:6000
hello world

Я вижу, что сервер Android TCP получает текст от telnet на локальном хосте, он просто не может установить сокетное соединение с удаленнымклиент, но, по крайней мере, правильно настроил переадресацию портов.

...