Android Socket подключается к серверу, но ничего не пишет - PullRequest
0 голосов
/ 04 июля 2018

В настоящее время я использую сервер на 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();
        }

1 Ответ

0 голосов
/ 05 июля 2018

Вам нужно либо сбросить PrintWriter, либо создать автоматическую очистку. Это не по умолчанию.

...