急救! java socket流的关闭问题 close shutdown

gbybywj 2011-05-16 12:35:29
我想用socket实现客户端与服务器端的通信,问题是:
当我在一端向另一端用BufferedWriter(OutputStreamWriter(socket.getOutputStream()))写入数据时,写完了,如果不关闭bw,程序会一直阻塞,大家知道的;但是若关闭了bw,信息是写出去了,但是bw关闭后连带socket他也给我关闭了,问题是我还有东西要写回呢!即,我要实现信息互通,而不是单方向写入,写完后一关了之;我还要用到InputStream,还要写回信息。
这就出现了一对矛盾,关了bw不好,不关又不行;我尝试用socket.shutdownInputStream/OutputStream(),但效果不理想,本类可以写出的,却连写都写不进去了。另外,如果非用此方法不可的话,请高人给我举个例子吧!我愚笨,目前无法理解为什么我用它写出去的东西,BufferedReader读到的却是null,null!
小弟因学期项目迫在眉睫,卡在此处,望求高人指点,希望大家不吝赐教啊!!!问题补充:

大家帮帮忙吧!请大家帮帮忙吧!

以上是我在百度知道上提问的,等了许久,没见找一个有价值的答案。csdn上尽有电脑高手,请各位高手帮帮忙吧!
...全文
925 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
Mchange 2013-04-17
  • 打赏
  • 举报
回复
过了这么久了,不知道还有没有人会看,今天我遇到了这个问题。在out.print(); out.flush();之后,调用socket.shutdownOutput(); 服务器端就不会出现读取阻塞了。
ht_info 2013-01-11
  • 打赏
  • 举报
回复
这个问题出在BufferedWriter(OutputStreamWriter(socket.getOutputStream()))的BufferedWriter 就有缓冲功能,而且默认为不是自动行刷新的,bw.writeObject(str);后面再加一行bw.flush();就行了
bigfishyuwan 2012-11-23
  • 打赏
  • 举报
回复
遇到相同的问题
xuchiming 2011-11-17
  • 打赏
  • 举报
回复
这么久了.楼主问题解决了吗?
sxpyrgz 2011-06-23
  • 打赏
  • 举报
回复
正郁闷中
sxpyrgz 2011-06-23
  • 打赏
  • 举报
回复
哥们儿解决了没。我也遇到了这个问题
Evan-Huang 2011-06-20
  • 打赏
  • 举报
回复
对于JAVA SOCKET所有的相关类,都可以查看,JDK API 文档的。 对于文档理解不清楚再问就行了,把问题一步一步细化掉。
gbybywj 2011-05-18
  • 打赏
  • 举报
回复
谢谢大家
php17 2011-05-16
  • 打赏
  • 举报
回复
用多线程就行了。。。
Shine_Panda 2011-05-16
  • 打赏
  • 举报
回复
把BufferedWriter(OutputStreamWriter(socket.getOutputStream()))
分成多条语句,只关闭对应的对象就可以了
gbybywj 2011-05-16
  • 打赏
  • 举报
回复
那个,对,觉得这上面说不明白或有什么文档的话,可以邮我:
gby_sdu@163.com , 麻烦大家了。。。,我焦头烂额了已经
gbybywj 2011-05-16
  • 打赏
  • 举报
回复
to 小熊猫:
您能说得具体些吗?我还不太明白。
另外,对于shutdown,为什么我用不好使呢?我先用bw写出,然后用br在另一端读取,当我用bw.close()关了BufferedReader后(当然这时候socket他也给关上了),br至少可以正常的读入;但我不用bw.close()关闭,改用socket.shutdownOutput()关闭输出流(当然也就是bw了),br读到的却只有null!我对shutdownOutpet()方法不了解,制止时关闭了socket的输出流,但为啥输出的东西去却读不到呢?
大家要是知道socket.shutdownOutput()方法的用法及特点,麻烦敲敲键盘,给我浅浅的讲下。。。
xing_6 2011-05-16
  • 打赏
  • 举报
回复
如果客户端和服务器端要不断的双向通讯的话也可以自定义通讯协议,即定义双方发送数据的格式,按照格式解析数据,不关闭输入输出,直到整个客户端程序退出。

一般socket实现客户端和服务器端的通讯,服务器端都是单独启动一个线程来负责与客户端交互,当然还要看具体的需求是什么样了。

51,396

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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