当前位置: 代码迷 >> J2SE >> Socket数据流关闭后怎样使socket不关闭?解决方法
  详细解决方案

Socket数据流关闭后怎样使socket不关闭?解决方法

热度:185   发布时间:2016-04-24 01:43:11.0
Socket数据流关闭后怎样使socket不关闭?
本人在写一个用socket传送文件的程序,发送端代码:
while ((i = reader.read(b)) != -1)
  writer.write(b, 0, i);

writer.flush();
writer.close();

不加close的话数据不会完全发送出去,可是关闭后接收端的socket就被关闭了,可是我还想继续接收别的文件,怎么才能不让接收端的socket关闭呢??


------解决方案--------------------
流关闭了,不支持重新打开功能,只能重新建立连接。

解决方案一:
传一个文件,建立一个连接,传完文件后,立即关闭连接。

解决方案二:
在传一个文件之前,先传一个文件长度过去,再传文件的数据,传完了关闭连接。
接收端,先接收文件长度,然后,按照文件长度来读取数据,
当,文件长度读取完毕后,等待下次传递。

------解决方案--------------------
打个比方,如果我的文件,只有74个字节长,那么,我在传文件数据的时候,
先传一个长整型数据74过去,然后,在传具体的文件数据,当然,一共74个字节。

接收端,先接收一个长整型数据,当然,它是74,然后,向IO中读取74个字节的数据,
然后,等待下一次传递。

呵呵,这种方式,已经有了一个自定义协议的雏形,收发双方,可以根据实际需求,增删文件信息的数据。
  相关解决方案