在类里创建一个Socket连接后,为什么不能在不同方法中使用其getOutputStream()和getInputStream()???

MAX°孟兆 2005-03-15 10:35:45
如我在类A中声明了一个Socket成员变量,并在构造函数中初始化,并连接成功,并在构造函数中使用getOutputStream()和getInputStream()完成一次通讯,然后在类的其它方法也再次调用getOutputStreamm()和getInputStream()则一直等待,没有返回.为什么?

代码片断如下:
public class A
{
private Socket socket = null;
private DataOutputStream dos = null;
private DataInputStream dis = null;

public A()
{
socket = new Socket("127.0.0.1", 2222);
dos = new DataOutputStream(socket.getOutputStream());
dis = new DataOutputStream(socket.getInputStream());

.... // 通讯

dis.close();
dos.close();
}

public void fun()
{
dos.writeInt(1);
.... // 通讯

dis.close();
dos.close();
}
}
...全文
219 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
Hodex 2005-03-17
  • 打赏
  • 举报
回复
每个方法里都用到close,可考虑单独在A里编写一个close(),然后在你总的调用结束时再用这个close()方法
MAX°孟兆 2005-03-15
  • 打赏
  • 举报
回复
这里是笔误.不好意,问题还是存在.
tanzheng617 2005-03-15
  • 打赏
  • 举报
回复
你的输入流写错啦!
dis=new DataInputStream(socket.getInputStream());
MAX°孟兆 2005-03-15
  • 打赏
  • 举报
回复
如果我在A()中不dos.close()的话,也不行,程序在调用fun()之间就等待了.
各位有没有试一下?
Hodex 2005-03-15
  • 打赏
  • 举报
回复
fun()在何时调用

感觉在A()中dos.close()后,再在fun中调用dos有点问题
MAX°孟兆 2005-03-15
  • 打赏
  • 举报
回复
我在fun()的最后dos.close()后面加入的输出语句没有执行.而且程序没有结束也没有异常.
是什么原因?
zhang21cnboy 2005-03-15
  • 打赏
  • 举报
回复
怎么会呢?

MAX°孟兆 2005-03-15
  • 打赏
  • 举报
回复
public void fun()
{

dos.writeInt(1); // <===== 程序在这里空等,为什么?如何解决?
.... // 通讯

dis.close();
dos.close();
}
MAX°孟兆 2005-03-15
  • 打赏
  • 举报
回复
我知道了,应该不要close(),而且flush(),因为close()的话整个连接也就关闭了.

62,635

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧