В настоящее время я использую сервер на Eclipse (локальный IP 192.168.1.255, прослушивание порта 4567). Клиент может подключать проблемные сокеты и отправлять сообщения, которые будут напечатаны на терминале сервером.
Часть кода сервера выглядит следующим образом:
System.out.println("Client connected: " + clientName);
String line;
while (true){
line = in.nextLine();
System.out.println("STRING RECEIVED: " + line + " FROM " + clientName);
}
где in - входной поток клиентского сокета.
Часть клиентского кода вместо этого:
while(true) {
System.out.print("\nEnter your input: ");
line = stdin.next();
socketOut.println(line);
socketOut.flush();
}
Так, например, возможный вывод на серверный терминал с двумя подключенными клиентами следующий:
Client connected: Socket[addr=/192.168.1.225,port=54852,localport=4567]
STRING RECEIVED: Hello FROM Socket[addr=/192.168.1.225,port=54852,localport=4567]
STRING RECEIVED: World FROM Socket[addr=/192.168.1.225,port=54852,localport=4567]
Client connected: Socket[addr=/192.168.1.225,port=54945,localport=4567]
STRING RECEIVED: Hello2 FROM Socket[addr=/192.168.1.225,port=54945,localport=4567]
Все работает хорошо, поэтому я пытаюсь получить доступ к серверным лоткам через простое приложение, разработанное на Android Studio. Код:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
new BackgroundTask().execute();
}
private class BackgroundTask extends AsyncTask {
@Override
protected Object doInBackground(Object[] params) {
try {
Socket socket = new Socket("10.0.2.2", 4567);
PrintWriter out = new PrintWriter(socket.getOutputStream());
out.println(new String("Hi from Android!"));
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
}
}
Но вывод просто
Client connected: Socket[addr=/192.168.1.225,port=55001,localport=4567]
и ничего больше.
Любой совет о println ничего не отправляет? Программа отлично работает на Eclipse как на стороне клиента, так и на стороне сервера, поэтому, я думаю, проблема в Android. Кроме того, я включил сетевые разрешения Android, поэтому соединение должно работать.
Спасибо всем заранее.
РЕДАКТИРОВАТЬ : решено, я просто изменил код клиента Android на:
try {
Socket socket = new Socket("10.0.2.2", 4567);
if (socket.isConnected()) {
PrintWriter out = new PrintWriter(new BufferedWriter(
new OutputStreamWriter(socket.getOutputStream())), true);
String line = new String("Hi from Android!");
out.println(line);
}
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}