Java TCP 服务器一次发送更多消息

标签 java tcpclient tcpserver tcpsocket

使用此代码:

Java 服务器端:

...
out = new PrintWriter(this.client.getOutputStream(), true);
...
public void sendMsg(String msg) {
    out.println(msg);
    //out.flush(); // we don't flush manually because there is auto flush true
}

C# 客户端:

    while(connected) {
        int lData = myStream.Read(myBuffer, 0, client.ReceiveBufferSize);
        String myString = Encoding.UTF8.GetString(myBuffer);
        myString = myString.Substring(0, lData);
        myString = myString.Substring(0, myString.Length-2);
        addToQueue(myString);
    }

变量 myString 有很多消息,服务器应该像这样一条一条地发送它们

hello \r\t hello \r\t ...

他们应该像这样分开来

hello \r\t
hello \r\t ...

这意味着当我一个接一个地等待时,它们会立即全部排成一排,我怎样才能让它在单独的冲洗中一个接一个地发送。

注意我在一秒 (1s) 内连续发送 30~ 条消息,我希望它们分开。

最佳答案

TCP 支持字节流。这意味着无论您如何发送数据,您都无法控制数据如何到达。 (除了它会以字节形式出现)如果你依赖它以任何特定方式出现,你应该重新考虑你的协议(protocol)。

您可以减少数据聚束的数量,但所有这些所做的只是以吞吐量为代价来减少延迟,切勿依赖。如果可以更改这些设置,可以通过关闭 Nagle 并减少 TCP 驱动程序中的协同设置来减少(但不能消除)。

i want them separate.

您可以想要它,但 TCP 不支持您想要的消息。


你的解决方案是让你的读者匹配你的作者协议(protocol)。您发送行,因此您应该一次读取行,例如BufferedReader.readLine(),而不是缓冲区中恰好包含的任何数据 block 。

关于Java TCP 服务器一次发送更多消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14112479/

相关文章:

java - Java中迭代父类ArrayList时使用子类方法

c# - TCP服务器可以开始与客户端通信吗

c - 使用 epoll 的 tcp 服务器给出非套接字错误

C# 监听器线程上的 CPU 使用率高,休眠未命中断开连接

java - Springboot Jpa更新记录而不是插入

java - 动态添加 View 到自定义 ListView 项目布局不起作用

java - 为什么使用线程时我的程序变慢?

c# - 同步多套接字客户端说明

tcp - 使用 JMeter 的同步 TCP 请求

Ruby TCPServer 套接字