Socket客户端无法接收服务端报文

kingsuperman 2011-11-30 10:28:06

public static String getBalance(String ip, int port, String transno,
String accno) throws Exception {
Socket socket = null;
PrintStream output = null;
BufferedReader reader = null;
try {
socket = new Socket(ip, port);
if (socket.isConnected()) {
socket.setSoTimeout(10000);
OutputStream outputStream = socket.getOutputStream();
output = new PrintStream(outputStream);
output.flush();
int i = transno.length() + accno.length();
String tempnum = "";
for (int j = 0; j < 6 - String.valueOf(i).length(); j++) {
tempnum += "0";
}
tempnum = tempnum + String.valueOf(i);
String temp = tempnum + transno + accno;
output.println(temp);
output.flush();
InputStream inputStream = socket.getInputStream();
StringBuffer sb = new StringBuffer();
byte[] b = new byte[1024 * 5];
int n = -1;
while ((n = inputStream.read(b)) != -1) {
sb.append(new String(b, 0, n));
}
System.out.println(sb.toString());
output.close();
inputStream.close();
socket.close();
return sb.toString();
}
} catch (Exception e) {
try {
if (socket != null) {
socket.close();
}
} catch (IOException e1) {
throw e1;
}
throw e;
}
return "";
}



我的客户端是这样的,服务能接收我的报文,双方的接口也没错,由于服务端是别人开发,没有代码,别人用他们自己写的客户端测试程序测试他们的服务端程序都能正常收发消息,我自己写个简单的服务端直接返回字符,也能接收。求解,不知道为什么我的客户端不能接收服务端返回的报文。
...全文
433 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
gukuitian 2011-11-30
  • 打赏
  • 举报
回复
有可能。你看看已经测试通过的代码,看它们发送的消息和你的有什么区别吗
[Quote=引用 3 楼 kingsuperman 的回复:]
引用 1 楼 gukuitian 的回复:
是不是你请求的消息错了,
服务端一般都是按你请求的信息来返回的


你是意思是我发送的消息于接口不符,导致服务端处理异常,没有返回信息?
[/Quote]
kingsuperman 2011-11-30
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 chenshui1987 的回复:]
这个是长连接还是短连接来的? 服务器发送完报文后是否会发送关闭socket指令,如果没有发送该指令的话,你的
while ((n = inputStream.read(b)) != -1) {
sb.append(new String(b, 0, n));
}
这段代码可能没法停止
[/Quote]

Socket短连接
kingsuperman 2011-11-30
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 gukuitian 的回复:]
是不是你请求的消息错了,
服务端一般都是按你请求的信息来返回的
[/Quote]

你是意思是我发送的消息于接口不符,导致服务端处理异常,没有返回信息?
chenshui1987 2011-11-30
  • 打赏
  • 举报
回复
这个是长连接还是短连接来的? 服务器发送完报文后是否会发送关闭socket指令,如果没有发送该指令的话,你的
while ((n = inputStream.read(b)) != -1) {
sb.append(new String(b, 0, n));
}
这段代码可能没法停止
gukuitian 2011-11-30
  • 打赏
  • 举报
回复
是不是你请求的消息错了,
服务端一般都是按你请求的信息来返回的
kingsuperman 2011-11-30
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 gukuitian 的回复:]
有可能。你看看已经测试通过的代码,看它们发送的消息和你的有什么区别吗

引用 3 楼 kingsuperman 的回复:
引用 1 楼 gukuitian 的回复:
是不是你请求的消息错了,
服务端一般都是按你请求的信息来返回的


你是意思是我发送的消息于接口不符,导致服务端处理异常,没有返回信息?
[/Quote]


同样的报文,我的客户端发过去之后就收不到服务端返回的东西,他们自己写的测试客户端可以正常收发信息。
关于socket我也不是特别懂,我简单分析了下:
1、网络堵塞原因,如果网络有问题,那服务端就不可能接收到我发的信息;
2、本机防火墙也关了,同样是收不到;
还有啥情况可能导致收不到报文呢,求补充

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧