Я могу использовать клиент 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 на локальном хосте, он просто не может установить сокетное соединение с удаленнымклиент, но, по крайней мере, правильно настроил переадресацию портов.