本人在写一个用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个字节的数据,
然后,等待下一次传递。
呵呵,这种方式,已经有了一个自定义协议的雏形,收发双方,可以根据实际需求,增删文件信息的数据。