A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© fighting 中级黑马   /  2013-3-25 13:53  /  3914 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 fighting 于 2013-3-30 23:04 编辑

上午看一哥们问了一个socket的问题,我试了试发现些问题:
当在一端将数据写出,在另一端读取数据时,总是提示连接被重置,
哪位能说明一下socket的实现原理,以及出现这种情况的原因。
  1. class TextClient {
  2.         public static void main(String[] args) throws Exception {
  3.                 Socket s = new Socket("localhost", 10006);
  4.                 OutputStream os = s.getOutputStream();
  5.                 os.write("hahahahaha".getBytes());
  6.                
  7.                 os.close();
  8.                 s.close();        //如果这里不关闭的话,在服务端问题提示连接被重置
  9.         }
  10. }
复制代码
  1. class TextServer {
  2.         public static void main(String[] args) throws Exception {
  3.                 ServerSocket ss = new ServerSocket(10006);
  4.                 Socket s = ss.accept();
  5.                
  6.                 InputStream is = s.getInputStream();
  7.                
  8.                 byte[] buffer = new byte[1024];
  9.                 int length = -1;
  10.                 while(-1 != (length = is.read(buffer))){
  11.                         System.out.println(new String(buffer, 0, length));
  12.                 }
  13.                
  14.                 ss.close();
  15.                 s.close();
  16.         }
  17. }
复制代码

点评

如果仍有问题,请继续追问,如果问题已解决,请将分类改为已解决,谢谢  发表于 2013-3-30 22:39

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

4 个回复

倒序浏览
你这是在玩TCP连接,TCP连接的最大特点就是基于连接的,Socket有握手机制,如果客户端莫名关闭断开socket连接,服务器也会因为没有没有连接而关闭。
回复 使用道具 举报
这么好的问题为什么没有人回答啊
连接重置,是不是说,在传输数据的时候,另一个客户端连接到服务器,而该客户端与之前那个客户端
ip和端口相同,但是我想不出来为什么会这样,楼主的代码也没有用循环啊,还有
这个跟关闭socket有什么关系呢?为什么关闭了就不会出现问题,不关闭就会重置?
回复 使用道具 举报
韩松范 发表于 2013-3-30 07:19
这么好的问题为什么没有人回答啊
连接重置,是不是说,在传输数据的时候,另一个客户端连接到服务器,而该 ...

我也不知道为什么会这样。。。
回复 使用道具 举报
又没有满意的回复
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马