解释代码 public void run() { //获取socket对象 try { socket = new Socket(hostname, port); outputStream = socket.getOutputStream(); oos = new ObjectOutputStream(outputStream); inputStream = socket.getInputStream(); ois = new ObjectInputStream(inputStream); connect(); while (socket.isConnected()) { Message message = (Message)ois.readObject(); if (message != null) { switch (message.getType()) { case NOTIFICATION: LoginController.getInstance().showScene(); chatController.notify(message.getName() + "加入聊天",message.getPicture(),"新朋友加入","sounds/Global.wav"); break; case ERROR: chatController.notify(message.getMsg(),message.getPicture(),"出问题了","sounds/system.wav"); break; case JOINED: case DISCONNECTED: chatController.setUserList(message); break; case TEXT: chatController.showMsg(message); break; } } } } catch (Exception e) { e.printStackTrace(); } }
时间: 2023-06-11 21:07:07 浏览: 112
根据hostname自动获取目标设备的IPv4和Ipv6地址,并申请socket的模块
这段代码是一个线程的 run() 方法。它首先创建一个 Socket 对象,用于连接到主机名为 hostname,端口号为 port 的服务器。然后它获取该 Socket 对象的输入输出流,并创建相应的对象输入输出流。接下来,该方法调用 connect() 方法,该方法在连接成功时会执行一些操作。然后,该方法进入一个 while 循环,不断从输入流中读取消息,并根据消息类型进行不同的操作。如果读取到的消息为 null,那么该线程将一直阻塞在 ois.readObject() 方法处,直到有新的消息到来。如果读取到的消息不为 null,则根据消息类型进行相应的操作,包括显示通知、显示错误信息、更新用户列表和显示聊天消息。
需要注意的是,该代码可能会抛出一些异常,因此需要在 catch 块中对异常进行处理。如果发生异常,该线程将打印异常信息并退出。
阅读全文