我正在从服务器上读取tcp-ip套接字响应(JSON)。问题是,有时如果从服务器接收的数据非常大,则它会以2或3批次随机中断JSON。有没有办法检测从服务器发送了多少批次,或者是否有机制在客户端解决这个问题?下面是TCP / IP的钛代码:
var socket = Ti.Network.Socket.createTCP({
host: '127.0.0.1',
port: 5000,
connected: function (e) {
Ti.API.info('Socket opened!');
Ti.Stream.pump(socket, readCallback, 2048, true);
},
error: function (e) {
Ti.API.info('Error (' + e.errorCode + '): ' + JSON.stringify(e));
},
});
socket.connect();
function writeCallback(e) {
Ti.API.info('Successfully wrote to socket.'+JSON.stringify(e));
}
function readCallback(e) {
Ti.API.info('e ' + JSON.stringify(e));
if (e.bytesProcessed == -1)
{
// Error / EOF on socket. Do any cleanup here.
Ti.API.info('DONE');
}
try {
if(e.buffer) {
var received = e.buffer.toString();
Ti.API.info('Received: ' + received);
} else {
Ti.API.error('Error: read callback called with no buffer!');
socket.close();
}
} catch (ex) {
Ti.API.error('Catch ' + ex);
}
}
答案 0 :(得分:0)
TCP / IP是一个流媒体接口,无法保证客户端从套接字尝试读取时将接收多少数据。
您必须在服务器和客户端之间实现某种协议。
答案 1 :(得分:0)
TCP/IP 协议不是那样设计的,你不知道你会收到多少数据,它在黑暗中哈哈
据我所知,有两种方法可以解决这个问题。
第一个是EOF,你会在数据包的末尾添加一些作为前缀的东西,它是一个独特的字符串,如[%~Done~%]
所以?您将收到所有内容并在其中搜索有关此字符串的内容,您找到了吗?我们去加工吧。
但我认为这是浪费时间、内存,而且非常原始
第二个是 Prefix Packet header,它对我来说是最好的,.NET 中的一个例子可以在这里找到:Thanks to Stephen Cleary