Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/216.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
TCP android服务器未接收到来自Java TCP客户端的第一条消息_Java_Android_Sockets_Serversocket - Fatal编程技术网

TCP android服务器未接收到来自Java TCP客户端的第一条消息

TCP android服务器未接收到来自Java TCP客户端的第一条消息,java,android,sockets,serversocket,Java,Android,Sockets,Serversocket,我有一个java的TCP客户端和android的TCP服务器。将消息从服务器发送到客户端工作正常,但当消息从客户端发送到服务器(android)时,它不会显示消息,但当第二次重复相同的过程时,服务器会显示消息,即java客户端的发送按钮应按下两次,然后android应用程序中只显示消息 Java客户端代码 //btn handelar to send message form textarea private class ButtonHandler implements ActionListen

我有一个java的TCP客户端和android的TCP服务器。将消息从服务器发送到客户端工作正常,但当消息从客户端发送到服务器(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();
}

问题在于以下代码部分:

while(readerIn.readLine()!=null){
    final String incomingMsg = readerIn.readLine();
    ....
在第一行中,您正在阅读该行并忽略它。因此,你要扔掉每一行

读取和使用while循环的正确方法如下:

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

但是当消息从客户端发送到服务器时
???没有试图发送内容的代码。也不是在客户端。服务器端也没有。客户端和服务器仅尝试读取行。如果什么都不寄,那就不去了。谢谢!这帮了我的忙,但你能详细说明一下这是怎么发生的吗?我不明白。在检查while条件之后,如果条件满足,它将进入循环,那么它如何跳过第一个值?我们只是检查读卡器值,没有在内部或外部清除或执行任何操作。
readLine()
的每次调用都会占用一行,即使您没有将返回值分配给变量。因此,如果你每while循环调用两次,你只会得到第二行。
String incomingMsg;
while((incomingMsg = readerIn.readLine())!=null){
      ....
}