socket连接传输对象无响应

今天遇到一个相当奇怪的问题,一句代码处执行不下去了,用断点观察的。但没有产生任何异常,也没报错。
函数如下,在红色运行不下去了。说明下,整个程序是像qq那样可以客户端用户端互相通讯的。user是我自己设计来保存socket连接对象和ObjectOutputStream,ObjectOutputStream对象的,每个用户一个对象记录着。
public void run() {
            Socket so;
              User user = this.user;
              so=user.getSo();
              Message mes;
              String message = "出错了";
              ObjectInputStream in =null;             
//              in = user.getIn();
              try {
                      int b = 1;
                      in=new ObjectInputStream(newBufferedInputStream(so.getInputStream()));
                      int c = 1;
                      while (true) {
                              mes = (Message) in.readObject();
                              message = mes.getMessage();
                              jTextAll.append(user.getUsername() + ": " + message);
                              jTextAll.append("\n");
                              Thread.sleep(20);
                      }
              } catch (Exception ex) {
                      Logger.getLogger(ServerFrame.class.getName()).log(Level.SEVERE,null, ex);
                      System.out.print(ex.getMessage());
                      System.out.print("出错了,有异常");
              }
}

解决方法1
我在user类里构造方法也有下面这句话,其实本来可以从user对象那这个in的
in = new ObjectInputStream(newBufferedInputStream(so.getInputStream()));
如果把user对象里这句去掉,上面那段代码就没事。否则就不运行无报错无异常。
解决方法2
就从user对象里拿in。上面函数里不建立ObjectInputStream对象,代码改为
//              Socket so;
              User user = this.user;
//              so=user.getSo();
              Message mes;
              String message = "出错了";
              ObjectInputStream in =null;             
              in = user.getIn();
              try {
                      int b = 1;
//                      in=new ObjectInputStream(newBufferedInputStream(so.getInputStream()));
                      int c = 1;
最后虽然达成了目标,但很疑惑,为什么在user对象有ObjectInputStream对象这边新建一个ObjectInputStream对象不行。难道不可以有两个?但即使如此不执行无报错无异常却令人很无奈,这个问题出现在服务器端的代码里,服务器端接收不了客服端消息。客户端的只建有一个ObjectInputStream,接收服务器端消息从未出问题。ObjectOutputStream两边都只建有一个,所以未出问题.

  这两天看了些书终于大概明白原因了,之所以在那句代码不执行下去不报错不异常,是因为在那里线程进入了阻塞状态,阻塞不太好,用异步的方法比较好。另外ObjectInputStream是以流方式通讯,这种流是tcp协议下的虚连接,应该是不能建两个流的。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值