我想用 java 的 socket 搞出一个 C/S 程序,想实现的功能很简单:客户端通过 socket 向服务器端发送一个字符串,服务器端收到后对该字符串进行简单的拼接处理后就将其返还给客户端,客户端再于控制台将服务器端返还的字符串打印出来。服务器端对接收到的每一个客户端 socket 都 new 出一个内部类 MyClient 的对象进行单独的处理,当某个客户端退出的时候,服务器端与之相对应的 MyClient 对象都被移除出专门用于保存所有 MyClient 对象的 LinkedList 容器对象。我所遇到的最大问题就是如何优雅的关闭客户端与服务器端的连接,使程序使用的时候很健壮,不会动不动就死掉。我所想到的解决方案如下:客户端的关闭存在两种三种情况:1.在控制台键入 disconnect 命令,服务器端收到以后就从 LinkedList 容器对象里面剔除与之相对应的 MyClient 对象,并于之前向相应的客户端返还一个 disconnect 字符串,待客户端自己接收到的时候再将自己关闭掉;2.再个就是暴力地直接关掉,一旦服务器端检测到客户端异常断开,也进行与第一种情况类似的处理;3.客户端在执行的时候发生异常,这个我没做考虑。服务器端的关闭:先干掉服务器端接收 socket 的 accept() 阻塞性方法,再依次从容器里取出与每个客户端对应的 MyClient 对象,取出这些对象中的 OutputStream ,向每一个客户端都发送一个 shutdown 字符串,在客户端接收到这个字符串以后就关掉自身持有的 socket 连接...其间还有很多的问题,皆由阻塞性方法无法受控制地关闭所引起,具体情况请见如下代码:
我想用 java 的 socket 搞出一个 C/S 程序,想实现的功能很简单:客户端通过&n