2012-01-20 22 views
0

有没有办法在套接字连接保持打开时从TCP套接字读取时检测EOF?Java服务器 - TCP套接字检测EOF,但没有关闭套接字连接

大部分我所看到的例子是沿着线的东西:

int n=0; 
While((n = read.inStream(data)) != -1){ 
    destType.write(data, 0, n); 
} 

然而,这意味着你被迫要接受一个新的数据块,每次创建一个新的连接。 在我的情况下,这是一个恒定的图像流,通过套接字作为字节发送,我想处理每个图像,而不必关闭连接,以便我可以将所有图像与单个用户相关联,以及不以高频率持续打开和关闭连接只是更有效率。

那么有没有办法做到这一点或一些可能的选择信息?

回答

1

否 - 如果连接保持打开状态,则流未达到其结尾。流的报告EOF ,然后有更多的数据的想法违背了流的原则。

如果你想在一个TCP流发送多封邮件,最简单的方法就是前缀的每一个消息,它的长度:

HEADER BODY 
HEADER BODY 
HEADER BODY 

然后客户端将读取头,发现该消息是多久,读取它,然后读取下一个标题等。

+0

或使用开始消息/结束消息指示符。 –

+0

@ShaneWealti:虽然这是可能的,但它变得更加密集客户端 - 在读取数据时必须解析数据,并制定一个转义策略,以确定数据是否自然包含“结束消息”指示符。 –

+0

我更喜欢这两种方式 - 一种以SOH开头的包含ASCII码的数据长度,可以进行结构和健全性检查的包含校验和的终止符。如果报头检查失败或终止器不良,则会丢弃所有数据,直到收到另一个可启动另一个报头检查的SOH为止。 –