我有一台通过gprs将数据发送到服务器的设备。问题是它发送原始数据,我不知道在哪里可以停止读取

目前,我正在使用TIdHttpServer和类似的东西来读取字符串:

var
    s : string;
    repeat
       s:=s+acontext.Connection.Socket.ReadChar;
    until acontext.Connection.Socket.InputBufferIsEmpty;

我的问题有更好的解决方案吗?

最佳答案

TCP是面向流的。如果协议(protocol)未知,则服务器只能尝试读入字节数组(如果内存不是问题)或文件流。如果客户端正常断开连接,则数据为“完整”。不幸的是,如果协议(protocol)未知,则服务器无法告知客户端是否死亡或正常断开连接。

InputBufferIsEmpty无济于事,因为它仅表示(TCP)缓冲区中是否有数据-并可能根据延迟而频繁发生,但这并不意味着不再有传输中的字节。

您可以通过在客户端设备上发送已知字符串来尝试对协议(protocol)进行“反向工程”。但是,如果发件人是黑匣子,则可能有很多特殊情况-考虑编码或“转义”字符等。

关于delphi - 从套接字读取原始数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10107004/

10-12 22:46
查看更多