TCP客户端(java)没有从TCP服务器(C#)接收消息

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TCP客户端(java)没有从TCP服务器(C#)接收消息相关的知识,希望对你有一定的参考价值。

我有一个用C#编写的GUI TCP服务器,用于监听4444端口和一个连接到4444端口的GUI java客户端。我可以从客户端向服务器发送消息,服务器端文本字段设置有消息,但是当我从服务器向客户端发送消息时,客户端的文本字段中不显示任何消息(也没有导致控制台)。需要帮忙。

- 用于从服务器向客户端发送消息的代码----- C#

 private void button1_Click(object sender, EventArgs e)
    {
        String outmsg = textBox1.Text;

        textBox1.Text = "";
        byte[] bytes = Encoding.ASCII.GetBytes(outmsg);


        String Msg = Encoding.ASCII.GetString(bytes);
        richTextBox1.AppendText("

" + Msg);


        networkStreamData.Write(bytes, 0, bytes.Length); //NetworkStream


        bytes = new byte[1024];   //For clearing the buffer



    }

---- Java客户端代码-----

 public void run () throws IOException
{
    Socket socket = new Socket ("127.0.0.1", 4444);
    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();
}

注意:通信在客户端和服务器之间正常工作,只有服务器和客户端之间存在问题。

更新: - 我关闭了网络流,它工作了!!!但是因为我在服务器中运行另一个子线程来侦听传入流,所以当我关闭网络流时,它会抛出异常并停止执行。

答案

Readline()需要' n'作为消息终止。由于在发送的消息中没有终止,读取时保持读取并且未设置消息。

另一答案

您似乎没有关闭服务器代码中的NetworkStream。然后清除缓冲区,该缓冲区可能在Stream完成数据发送之前发生。以下是创建TCP服务器的示例,即C#(dotnetcore)。 http://www.c-sharpcorner.com/article/building-a-tcp-server-in-net-core-on-ubuntu/

以上是关于TCP客户端(java)没有从TCP服务器(C#)接收消息的主要内容,如果未能解决你的问题,请参考以下文章

TCP服务通讯

在tcp从python服务器传输到c#客户端期间丢失数据

疯狂Java讲义:使用ServletSocket创建TCP服务器端

C TCP无法检测到断开的连接[重复]

客户端服务端交互(TCP) java

尝试在c中实现并发TCP服务器和客户端