TCP android сервер не получает первое сообщение от клиента Java TCP - PullRequest
0 голосов
/ 27 апреля 2018

У меня есть TCP-клиент в Java и TCP-сервер в Android. Отправка сообщения с сервера на клиент работает нормально, но когда сообщение отправляется с клиента на сервер (android), оно не показывает сообщение, но когда тот же процесс повторяется во второй раз, сервер показывает сообщение, т. Е. Кнопку отправки на Java-клиенте следует нажать дважды. тогда в приложении для Android отображается только сообщение.

код клиента Java

//btn handelar to send message form textarea
private class ButtonHandler implements ActionListener
{
    public void actionPerformed (ActionEvent event)
    {
        String outputLine = txArea.getText ();
        System.out.println ("Client > " + outputLine);
        out.println (outputLine);
        out.flush();


    }
}

   //receiving message
public void run () throws IOException
{
    Socket socket = new Socket ("192.168.123.3",1234);
    BufferedReader in = new BufferedReader (new InputStreamReader (socket.getInputStream ()));
    out = new PrintWriter (socket.getOutputStream (), true);

    String inputLine;

    while ((inputLine = in.readLine ()) != null)
    {
        System.out.println ("Client <  " + inputLine);
        rxArea.setText (inputLine);
    }


    out.close();
    in.close();
    socket.close();
}

Код Android-сервера

 public void runTcpServer(){

    handel = new Handler();
    try {

        int a = Integer.parseInt(new SettingDialog().port);
        //creating a socket to listen on a given port
        Log.i("NW LOG","PORT OPENED SUCESSFULLY in "+a);
        final ServerSocket serverSocket = new ServerSocket(a);

        Thread listenConnection = new Thread(new Runnable() {
            @Override
            public void run() {

                try {

                    //accepting the incoming socket connection request
                    Socket workstationSocket = serverSocket.accept();
                    //reading the incoming content
                   BufferedReader  readerIn = new BufferedReader(new InputStreamReader(workstationSocket.getInputStream()));

                   outMessage = new PrintStream(workstationSocket.getOutputStream(),true);


                    Log.i("NW LOG","WATING FOR MSG");
                    while(readerIn.readLine()!=null){

                        final String incomingMsg = readerIn.readLine();

                        //setting incoming message to UI thread using handler
                        handel.post(new Runnable() {
                            @Override
                            public void run() {
                                setMessage(IN,incomingMsg);
                            }
                        });


                    }
                    outMessage.close();
                    readerIn.close();
                    workstationSocket.close();
                    serverSocket.close();



                } catch (IOException e) {
                    e.printStackTrace();
                }


            }
        });listenConnection.start();

    } catch (IOException e) {
        e.printStackTrace();
    }


}

1 Ответ

0 голосов
/ 27 апреля 2018

Проблема в следующем фрагменте кода:

while(readerIn.readLine()!=null){
    final String incomingMsg = readerIn.readLine();
    ....

В первой строке вы читаете строку и игнорируете ее. Поэтому вы отбрасываете каждую вторую строку.

Правильный способ прочитать и использовать его для цикла while:

String incomingMsg;
while((incomingMsg = readerIn.readLine())!=null){
      ....
}
...