我用网络上的通信软件对javasocket进行测试,发送只有在断开连接之后Java后台才能接收到相应的发送信息,并不能即使接收到对应的信息。
求,如何解决这个问题,我发一下我启动socket连接的代码public void run() {
PrintWriter out=null;
BufferedReader in=null;
try {
out=new PrintWriter(socket.getOutputStream(),true);
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String inputLine="";
while((inputLine=in.readLine())!=null) {
if(MessageUtil.validate(inputLine)) {
Sinfo sinfo = MessageUtil.getSinfo(inputLine);
if(sinfo != null) {
Sdevice sdevice = GlobalService.getSdeviceService().getBySimnum(sinfo.getSimnum());
sdevice.getSinfos().add(sdevice);
sinfo.setSdevice(sdevice);
GlobalService.getSinfoService().saveObject(sinfo);
}
System.out.println(MessageUtil.getSinfo(inputLine).toString());
} else {
System.out.println("接收到的信息为错误信息 : " + inputLine);
}
}
in.close();
out.close();
socket.close();
} catch (Exception e) {
logger.error("连接时发生异常:" + e.toString());
}
}
求,如何解决这个问题,我发一下我启动socket连接的代码public void run() {
PrintWriter out=null;
BufferedReader in=null;
try {
out=new PrintWriter(socket.getOutputStream(),true);
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String inputLine="";
while((inputLine=in.readLine())!=null) {
if(MessageUtil.validate(inputLine)) {
Sinfo sinfo = MessageUtil.getSinfo(inputLine);
if(sinfo != null) {
Sdevice sdevice = GlobalService.getSdeviceService().getBySimnum(sinfo.getSimnum());
sdevice.getSinfos().add(sdevice);
sinfo.setSdevice(sdevice);
GlobalService.getSinfoService().saveObject(sinfo);
}
System.out.println(MessageUtil.getSinfo(inputLine).toString());
} else {
System.out.println("接收到的信息为错误信息 : " + inputLine);
}
}
in.close();
out.close();
socket.close();
} catch (Exception e) {
logger.error("连接时发生异常:" + e.toString());
}
}
解决方案 »
- 请教 JTable 里的单元格如何使得双击进入单元格后,单元格的内容处于全选中状态
- (求助关于服务器与客户端的问题)
- 大家帮帮忙,看看这几道面试题应该选什么?
- 急急,在线等待大侠解决·!!!!JAVA线程的问题
- java 对word 文件的读写问题,在线等待
- Tomcat中如何配置路径
- 学习java一段时间,却不知道该继续学习什么了,郁闷中。。。。
- 如何只得到年和月
- RMI中Naming.rebind()的第一个参数URL字符串和Naming.lookup()的参数有什么区别?
- *****如何在jbuilder里把一个Application做成一个.jar,使其可以双击运行?
- 用C++概念来理解Java构造
- 如何生成数据库
如果lz的信息格式,并没有约定用行结束符来分隔数据,那么用ReadLine方法是不合适的。比如,xml数据看起来是分行了,但是实际上那个分行是编辑器在显示时候的效果,文本里并没有分行。
建议lz用网络抓包工具测试下,诊断原因。只要数据发送了,是一定会收到的。
没有什么东西读的时候不阻塞,还能干嘛?
和这种情况是一致的while((count=in.read(buff))!=-1){}
in没有发送信息,不代表count就一定等于-1.明白么?它会一直阻塞,直到超时!你应该在{}进行长度的判断如果达到了你需求你就应该主动的跳出循环。所以不管是什么8583,tlv报文都是有长度可循的呢。
这必定不能像文件那样操作。文件读完了会返回-1通信怎么可能呢。希望你明白了