写了一个socket程序,client是JavaSE写的,server是C写的。交互过程很简单:1.client连接server
2.client发报文,server接收
3.server发应答报文,client接收
4.双方关闭连接现在的问题出在第三步:server方的日志显示发送已经成功,但client端则读超时,抛SocketTimeoutException。请问什么情况会导致这种现象呢?
client程序如下:Socket socket = null; ByteArrayOutputStream sendMessage = ServiceCaller.generateMessage(); try {
InetSocketAddress socketAddr = new InetSocketAddress("xxxxx", 60000); socket = new Socket(); socket.connect(socketAddr, 3000); socket.setSoTimeout(3000); socket.getOutputStream().write(sendMessage.toByteArray(), 0,
sendMessage.toByteArray().length); socket.getOutputStream().flush(); ByteArrayOutputStream respMessage = new ByteArrayOutputStream(); int recvLength = 0;
int readByte = -1;
byte[] recvBuffer = new byte[1000];//异常是此处抛出的,read超时
while ((readByte = socket.getInputStream().read(recvBuffer, 0, recvBuffer.length)) > 0) {
recvLength += readByte;
respMessage.write(recvBuffer, 0, readByte);
}
} catch (Exception e) {
e.printStackTrace(); } finally {
try {
socket.close();
} catch (Exception e) {
e.printStackTrace();
}
}
2.client发报文,server接收
3.server发应答报文,client接收
4.双方关闭连接现在的问题出在第三步:server方的日志显示发送已经成功,但client端则读超时,抛SocketTimeoutException。请问什么情况会导致这种现象呢?
client程序如下:Socket socket = null; ByteArrayOutputStream sendMessage = ServiceCaller.generateMessage(); try {
InetSocketAddress socketAddr = new InetSocketAddress("xxxxx", 60000); socket = new Socket(); socket.connect(socketAddr, 3000); socket.setSoTimeout(3000); socket.getOutputStream().write(sendMessage.toByteArray(), 0,
sendMessage.toByteArray().length); socket.getOutputStream().flush(); ByteArrayOutputStream respMessage = new ByteArrayOutputStream(); int recvLength = 0;
int readByte = -1;
byte[] recvBuffer = new byte[1000];//异常是此处抛出的,read超时
while ((readByte = socket.getInputStream().read(recvBuffer, 0, recvBuffer.length)) > 0) {
recvLength += readByte;
respMessage.write(recvBuffer, 0, readByte);
}
} catch (Exception e) {
e.printStackTrace(); } finally {
try {
socket.close();
} catch (Exception e) {
e.printStackTrace();
}
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货