84669 Lernen von Personen
152542 Lernen von Personen
20005 Lernen von Personen
5487 Lernen von Personen
7821 Lernen von Personen
359900 Lernen von Personen
3350 Lernen von Personen
180660 Lernen von Personen
48569 Lernen von Personen
18603 Lernen von Personen
40936 Lernen von Personen
1549 Lernen von Personen
1183 Lernen von Personen
32909 Lernen von Personen
光阴似箭催人老,日月如移越少年。
请指正:问题可能的关键点:一个客户端,只做一次 accept(),不关闭输出流
1.客户端保持了一个 clientSocket 实例(只调用了一次connect),服务器保持了一个 ServerSocket 实例。只保持一个客户端socket并且希望有第二次输入处理,这似乎是准备用长连接。
当关闭输出流时,该输出流对应的socket也将随之关闭 —— 《疯狂java讲义(第三版)》 p786
2.再往下看服务端。ss.accept() 放在了循环里,这是要处理多个客户连接;顺便对每个客户端有一次读取操作,然后这里并没有后续多次的读取操作,这可能是问题所在。
短连接 or 长连接?对于希望连续的多次通讯,可以使用一个连接,多次读写(长连接),也可以多次连接,每个连接一次读写(短连接)你的客户端想搞长连接,服务器似乎想搞短连接。建议:
长连接:客户端不变,服务器对这一个客户端,只做一次 accept(),循环处理多次输入通讯,监听流,但不关闭socket。
短连接:客户端每次发起新 socket 连接(建立新socket实例),每次操作完成,关闭流,关闭socket。服务器循环体不变,在循环体里关闭流,关闭每次accept()返回的socket。
因为不清楚您的业务,所以不知道代码的真实意图。另外还值得拓展的关注点是:
多客户端连接,多次连接,会话管理,并发等等。
可以好好看看你的代码,你在while循环里面每次都进行了关闭。
请指正:
问题可能的关键点:一个客户端,只做一次 accept(),不关闭输出流
1.客户端保持了一个 clientSocket 实例(只调用了一次connect),服务器保持了一个 ServerSocket 实例。只保持一个客户端socket并且希望有第二次输入处理,这似乎是准备用长连接。
2.再往下看服务端。ss.accept() 放在了循环里,这是要处理多个客户连接;顺便对每个客户端有一次读取操作,然后这里并没有后续多次的读取操作,这可能是问题所在。
短连接 or 长连接?对于希望连续的多次通讯,可以使用一个连接,多次读写(长连接),也可以多次连接,每个连接一次读写(短连接)
你的客户端想搞长连接,服务器似乎想搞短连接。建议:
长连接:客户端不变,服务器对这一个客户端,只做一次 accept(),循环处理多次输入通讯,监听流,但不关闭socket。
短连接:客户端每次发起新 socket 连接(建立新socket实例),每次操作完成,关闭流,关闭socket。服务器循环体不变,在循环体里关闭流,关闭每次accept()返回的socket。
因为不清楚您的业务,所以不知道代码的真实意图。另外还值得拓展的关注点是:
多客户端连接,多次连接,会话管理,并发等等。
可以好好看看你的代码,你在while循环里面每次都进行了关闭。