Http接口并发问题

柳柳柳柳也 2017-07-12 12:12:23
直接上代码,问题如下:
public Map<String,String> service(String userIp, String ipPort) {
Long begin = System.currentTimeMillis();
Socket client = null;
Map<String,String> accMap = new HashMap<String,String>();
MsgHeader header = new MsgHeader();
try {
DBCAgent agent = new DBCAgent();
// header.setTransactionId(transactionId.getBytes());
header.setIpaddress(userIp.getBytes());
header.setIpport(ipPort.getBytes());
client = new Socket("135.22.12.32", 18800);

boolean flag = agent.sendData(header, client);
if (flag) {
header = agent.recvData(client);
if (header != null){
String account = DECODE(new String(header.getAccount()));
String cityCode = areaCode2cityCode(DECODE(new String(header.getCityCode())));
String accName = DECODE(new String(header.getAccname()));
accMap.put("account", account);
accMap.put("cityCode", cityCode);
accMap.put("accName", accName);

Long end = System.currentTimeMillis();
RedisLogUtils.getInstance().lpush_log(RedisConstantsKey.IP_25+userIp, userIp+":"+ipPort,
accMap.toString(), "xxxxxxxx", "socket:xxxxxxx#xxxxxxx", "socket接口",(int) (end-begin));

}
} else {
return null;
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
Long end = System.currentTimeMillis();
RedisLogUtils.getInstance().lpush_log(RedisConstantsKey.IP_25+userIp, userIp+":"+ipPort,
"接口异常:"+e.getMessage(), "xxxxxxxx", "socket:xxxxxxxx#xxxxxxx", "socket接口",(int) (end-begin));
RedisLogUtils.getInstance().mail_put(RedisConstantsKey.IP_ALARM_25, "xxxxxx", "接口异常", e.getMessage()+"#"
+"socket:xxxxxxx#xxxxxxx", "xx:(xxxxxxxxxx)");

return null;
} finally {
try {
client.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return accMap;
}


现在报的异常是NullPointExcetpion,发现是错误指定的位置是finally中的client.close()。也就是说此时的client为null,那么问题来了,我看这个逻辑应该不会出现null的情况吧。这个方法是在一个http接口中调用,难道是因为并发的原因,导致client状态不一致报的异常吗??请大神解答下!!
...全文
414 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
柳柳柳柳也 2017-07-12
  • 打赏
  • 举报
回复
来大神解答呀。。。。
艾德 2017-07-12
  • 打赏
  • 举报
回复
明显userIp或ipPort有一个是null嘛,没走到client = new Socket("135.22.12.32", 18800);就出NPE了。 应该在这个NPE前面还有另一个NPE,仔细找找
mtian2020 2017-07-12
  • 打赏
  • 举报
回复
if(client!=null){ client.close(); } 加个非空判断吧
qq_35942223 2017-07-12
  • 打赏
  • 举报
回复
我的猜想造成client为null的原因就是client = new Socket("135.22.12.32", 18800);就是这一步没有执行就报异常,导致client为null,意思就是说存在其他异常
  • 打赏
  • 举报
回复
不是你以为不出会mull就不会出的。添加到跟踪里,看看每一步他的值是什么,你就找到关键所在了
李德胜1995 2017-07-12
  • 打赏
  • 举报
回复
在方法里面打印一下client看看。。。。

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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