在套接字的一侧,我知道数据正确地进入套接字。
我建立了一个连接:
Connection sr = new Connection();
Server server = new Server("NAME", Interger.parseInt(port));
server.setIp(ip);
sr.setServer(server);
//I know my server connection code is correct because I can send and receive data in
//other areas of my program just fine
InputStream is = null;
try
{
is = sr.getChannel().socket().getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
StringBuffer text = new StringBuffer();
int k =0;
while(k != -1)
{
k = br.read();
text.append((char) k);
}
}
catch(Exception e)
{
//no errors ever get thrown
}
然后我只得到了我发送的总数21398中的一半数据,10989字节。它读取的字节数会有所不同,但数据总是以..., "values": ["
结尾,在我发送的数据中,..., "values": ["", ""]
就是{。}}。
答案 0 :(得分:1)
继续阅读,直到获得所有数据。这个问题最近每周出现一次。无法保证网络会立即显示所有数据。
在获得所有数据之前,您需要继续阅读。你怎么知道发送了多少数据?您可能应该在客户端/服务器之间构建一个小协议,该协议定义将要发送多少数据,服务器读取该小头并继续读取,直到收到完整消息。
答案 1 :(得分:1)
不知道这是否可以帮到你:
int k =0;
while((k = br.read()) != -1){
text.append((char) k);
}
1)在你的情况下,它正在检查下一个iteration
,这可能会导致在{{1}的末尾附加不可表示的字符(char
为-1) }。
2)永远不要让text
为空,可能有一些catch block
。
答案 2 :(得分:-1)
因为我的套接字的发送方是c ++,我不小心将空ASCII值传入套接字。并且它在套接字的java端没有记录,如果读取遇到空值,则将其视为文件的结尾。所以它过早地结束了流,因为它达到了空。