本帖最后由 doitforyou 于 2013-9-10 00:37 编辑
总的来说,何时定义标记,主要看客户端循环结束后,服务端依然处于阻塞即读取状态,如果会处于阻塞状态,则需要定义标记,如果不是阻塞状态,则不需要定义标记。具体如下:
何时不需要定义标记:
如果客户端发送数据循环结束,执行到Socket关闭之前没有遇到阻塞状态时,如没有遇到read()方法等,则不需要定义标记,因为客户端close方法执行后,服务端也会结束循环。
何时需要定义标记:
当客户端和服务端进行Socket网络传输时,如果客户端发送数据循环结束后继续执行,遇到read()方法读取服务端反馈信息时,会处于阻塞状态,此时则需要定义标记,来告知服务端我数据传输完毕,使服务端停止等待读取状态,继续往下执行,发送确认信息。
定义标记的两种方法:
1.自定义标记(tomcat服务器会用到,建议掌握):可以定义字符串或者时间戳作为结束标记,字符串易和文本内容重复,不建议;时间戳是唯一的,具体使用方法可参照视频。
2.Socket本身自带的方法:shutdownInput()、shutdownOutput(),对象直接使用即可。 |