我正在研究java中的网络模拟。我将数据从服务器端发送到客户端。客户端接收到这些数据,然后客户端开始读取已经进入其自己的缓冲区的数据,并在客户端终端上显示有多少数据已经到达,而在服务器端,它继续发送数据。接收语句也写在客户端,但客户端正在忙于读取其缓冲区。完成后,它从服务器接收数据。有时,当我运行程序时,不会读取从服务器发送的数据,并且会发生“连接重置”异常。这是计时问题吗?是否应立即在客户端接收从服务器发送的数据?还是由于其他原因? 这是服务器的侧面代码:
soc.sendHP_Grant(grantSizeHP2); //soc is the socket's object
soc.sendLP_Grant(grantSizeLP2);
soc.sendGrant_info(grantStartTime);
soc.sendGrant_info(grantEndTime);
而在客户端:
receivedGrant_HP = socOnu.receiveReportHP();
receivedGrant_LP = socOnu.receiveReportLP();
startTime = socOnu.receiveGrant_Info();
endTime = socOnu.receiveGrant_Info();
onu2.accessTraffic("ONU2-Traffic-report-2.txt");
之后,我再次使用服务器端代码发送更多数据,然后再次使用客户端代码接收数据。据我所知,这是因为我没有立即在客户端接收数据。请提及解决方案或是否有其他原因。请提及解决方案。提前致谢
这是我用于在客户端接收数据的代码(引起问题):
public double receiveReportHP() throws IOException{
DataInputStream dis = new DataInputStream(socket.getInputStream());
double reportHP = dis.readDouble(); //exception on this line
return reportHP;
}
而发送方代码是(工作正常):
public double receiveReportForHP() throws IOException{
DataInputStream dis = new DataInputStream(socket.getInputStream());
double reportHP = dis.readDouble();
return reportHP;
}