求教:java 的 socket 只能连接一次? 

荆棘谷-部落-王亚楠 2014-07-01 09:02:38
String result = "";
Socket client = new Socket("localhost", 1111);
BufferedReader sin = new BufferedReader(new InputStreamReader(client.getInputStream()));
PrintWriter sout = new PrintWriter(client.getOutputStream(), true);
sout.write("hello world!");
sout.flush();
result = sin.readLine();
System.out.println(result);
sout.write("hello world again!") //服务端接收不到数据
result = sin.readLine(); //获取的是 null
System.out.println(result);

麻烦指教下,如何解决,这个 java 的 socket 只提交一次的问题的?
...全文
1615 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
zmz08 2015-05-20
  • 打赏
  • 举报
回复
第二次写完没有sout.flush();
  • 打赏
  • 举报
回复
谢谢各位,平均给分。。。
冰思雨 2014-07-01
  • 打赏
  • 举报
回复
同一个Socket 可以多次连接的,一次连接也是可以多次收发数据的。 楼主的数据发送不出去,估计是接收端没有把发送的数据接收处理吧。 客户端和服务端的数据收发,是要双方联动处理的,不能只发不收也不能只收不发。
疯癫行者 2014-07-01
  • 打赏
  • 举报
回复
在服务器端要对socket.accept方法进行循环,才能接受多次客户端请求。 参考:http://blog.csdn.net/turkeyzhou/article/details/5007125
oh_Maxy 2014-07-01
  • 打赏
  • 举报
回复
在一个主线程里同时使用一个socket通信,需要顺序的一个发消息、一个接消息,稍有不慎,会存在等待的情况。可以考虑将一对一的读、写放在单独的线程里,这样,C-->S和S-->C就可以并行交流了。 (不能使用Runnable方式的多线程,会有Socket被提前回收的情况。)
rumlee 2014-07-01
  • 打赏
  • 举报
回复
干嘛不用mina之类的nio框架,socket编程将变得容易得多,而且性能也比自己写的好多了。
MiceRice 2014-07-01
  • 打赏
  • 举报
回复
显然Socket可以双向收发多次,只不过你程序的读写关系不匹配(Server和Client之间)导致发生了死等而已。

62,614

社区成员

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

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