晚场电影 2021-10-20 00:51 采纳率: 66.7%
浏览 42
已结题

一个关于流对象创建的问题

socket通信,debug表示在创建对象输入流的时候程序卡死,希望能帮忙看看。
在创建这个流之前已经创建了三个流。


class ClientRecieve implements Runnable{
    Socket socket;
    InputStream is;
    ObjectInputStream ois = null;

    public ClientRecieve(Socket socket) {
        this.socket = socket;
        try {
                 //问题就出现下面语句,单步执行卡死
            ois = new ObjectInputStream(socket.getInputStream());

        } catch (IOException e) {
            System.out.println("客户端输入流失败。");
            Closeutil.closeAll(is, ois);
            e.printStackTrace();
        }
    }

    public Message recieve(){
        Message message = null;
        try {
             message = (Message) ois.readObject();
            System.out.println("客户端接接收信息成功");
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        return message;
    }

    @Override
    public void run() {
        while(true){
            Message message;
            message = recieve();

        }
    }
}


  • 写回答

2条回答 默认 最新

  • stacksoverflow 2021-10-20 09:11
    关注

    new ObjectInputStream(socket.getInputStream());的时候,已经开始从服务端读消息了,
    卡死的原因是这一行执行的时候在等待服务器端发消息。

    给你简单的改造了一下

    
    class ClientRecieve implements Runnable{
        Socket socket;
        InputStream is = null;
     
        public ClientRecieve(Socket socket) {
            this.socket = socket;
            try {
                //问题就出现下面语句,单步执行卡死
                is = socket.getInputStream();
     
            } catch (IOException e) {
                System.out.println("客户端输入流失败。");
                Closeutil.closeAll(is);
                e.printStackTrace();
            }
        }
     
        public Message recieve(){
            Message message = null;
            try {
                ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
                 message = (Message) ois.readObject();
                System.out.println("客户端接接收信息成功");
            } catch (IOException e) {
                e.printStackTrace();
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }
            return message;
        }
     
        @Override
        public void run() {
            while(true){
                Message message;
                message = recieve();
     
            }
        }
        
    }
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 10月28日
  • 已采纳回答 10月20日
  • 创建了问题 10月20日

悬赏问题

  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改
  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持