我有一台设备通过gprs将数据发送到我的服务器。问题是它发送原始数据,我不知道在哪里可以停止阅读
目前我正在使用TIdHttpServer和类似的内容来阅读字符串:
var
s : string;
repeat
s:=s+acontext.Connection.Socket.ReadChar;
until acontext.Connection.Socket.InputBufferIsEmpty;
我的问题有更好的解决方案吗?
答案 0 :(得分:3)
TCP是面向流的。如果协议未知,则服务器只能尝试读入字节数组(如果内存不是问题)或文件流。如果客户端正常断开连接,则数据已完成“#39;”。不幸的是,如果协议未知,服务器无法告诉客户端是否正常死机或断开连接。
InputBufferIsEmpty没有帮助,因为它只说(如果)(TCP)缓冲区中有数据 - 并且根据延迟,这可能经常发生,但这并不意味着没有更多的飞行中字节。
您可以尝试反向工程'协议,通过客户端设备发送已知字符串。但如果发件人是一个黑盒子,可能会有很多特殊情况 - 想想编码或逃避'人物等。
答案 1 :(得分:0)
你可以自己制定协议。
有些想法是: