马士兵吧 关注:3,980贴子:9,199
  • 5回复贴,共1

在看j2se聊天室视频里有一个地方不明白

只看楼主收藏回复

DataOutputStream dos = new DataOutputStream(s.getOutputStream());
dos.writeUTF(str);
dos.flush();
dos.close();
这是期是的一段代码,在程序中先打开sever端,在打开客户端,在客户端中输入一段字符后回事,没有问题,第二次在客户端在输入一段字符后回车,这里出错了。显示的错误是Socket is closed,在视频中马老师说是因为dos.close()。我不明白的是在第次在客户端的输入框中输入字符后回事不是都要重新调用DataOutputStream dos = new DataOutputStream(s.getOutputStream());这句话,然后dos不就被重新生成出来了并且连上了吗?为什么会报错呢,请大在神指教。


IP属地:浙江1楼2014-08-28 21:56回复
    在手册中找到一句话:
    getOutputStreampublic OutputStream getOutputStream() throws IOException返回此套接字的输出流。
    如果此套接字具有关联的通道,则得到的输出流会将其所有操作委托给通道。如果通道为非阻塞模式,则输出流的 write 操作将抛出IllegalBlockingModeException。
    关闭返回的 OutputStream 将关闭关联套接字。
    “关闭返回的 OutputStream 将关闭关联套接字。”这句话的意思是不是调用dos.close()后就把socket关了?但是我在DataOutputStream dos = new DataOutputStream(s.getOutputStream());这段代码前面加上了system.out.println(s)同样输入两次字符回车,得到的s值是一样的,我的电脑上:Socket[addr=/127.0.0.1,port=8888,localport=53181],这是不是说明socket没有关闭呢?还望大神指教。


    IP属地:浙江2楼2014-08-28 22:43
    回复
      2025-08-03 14:40:41
      广告
      不感兴趣
      开通SVIP免广告
      楼主有那老师javase视频吗,有的话给我一份可以吗,感激


      IP属地:广东来自Android客户端6楼2018-07-19 01:32
      回复