JAVA TCP 服务端需要等到客户端关闭之后才能后台打印发送数据。

2025-03-13 22:31:40
推荐回答(3个)
回答1:

JavaTCP服务端 与 TCP客户端(Java写的 C写的 ...) 通讯 会等到客户端说 我要关闭了(数据数据数据数据数据/n) 然后服务端才会往下进行 (服务端才打印接收到的信息 以及数据库等后续操作)
所以 客户端 发送的信息 一定要以/n 或者/r/n结尾
否则 服务端会一直等待客户端发送数据
血泪之谈

回答2:

这是因为你的服务端是先读取客户端数据,因为这个Socket InputStream 是阻塞的。因为 socket 是全双工的,所以我们应该:
1、当我们使用同步的 I/O 我们就得用双线程,一个负责读取,读取后处理并把回复放入“出站队列”;另一个线程就是从”出站队列“中读取"回复”并写出。
2、当我们使用异步的 I/O 时我们不需要多线程,不过流程略有不同。可以百度/google 一下 Java NIO 中关于 ServerSocketChannel 和 SocketChannel 的样例。

http://docs.oracle.com/javase/1.4.2/docs/guide/nio/example/
http://docs.oracle.com/javase/7/docs/technotes/guides/io/example/

回答3:

原因猜测如下:

  1. 客户端写的数据太小,缓冲区没刷新,服务端未接受到数据;

  2. 客户端写完一定的数据量后没flush,所有的数据都在缓冲区中。

你可以试试~


  1. 客户端写一定的数据flush一下;

  2. 或者客户端写完一定的数据加入结束标志。