折戟X沉沙
2015-04-09 01:28
采纳率: 72.7%
浏览 2.1k
已采纳

问题:同一个Socket上能有多个流吗?

Socket socket = server.accept();
DataInputStream input=new DataInputStream(socket.getInputStream());

List list=new Arraylist();
list.add(socket);
Socket socket1=list.get(0);
DataInputStream input1=new DataInputStream(socket1.getInputStream());

这里的input和input1为什么不能同时readUTF()?

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

3条回答 默认 最新

  • chenhucxc 2015-04-09 01:35
    已采纳

    不行的
    一个socket就像一个管道,
    你的数据就像水流,
    假设不同的数据是不同颜色的墨水,
    黑色和红色都往一个管道里面走,
    出来的时候就分不出来了。

    你可以把发送的数据写成块,每次只发送一个块,这个块可能是红色,也可能是黑色,服务器一块一块的读,块上面标记类型和长度,读的时候就知道这个块到底是什么了。
    可以从多个线程往负责IO的线程发送数据块,由IO线程保证写完一个块再写另外一个块。

    以上回答来自百度http://zhidao.baidu.com/link?url=OeILeFFWk8bExiAUKSqKpFAETk39oubMdRz55t5Cw3yB_BnPHSfCyOYKejhtQZbJq_UZo_OnzEeUsjoEvAse4K

    点赞 评论
  • 会上树的狼 2015-04-09 01:38

    input和input1实际上是同样一个流。只不过是包装了一下而已。

    点赞 评论
  • 清水依恋成 2015-04-09 01:41

    Arraylist()是指针引用,你怎么放置无所谓,只要是非基础数据类型数据,都是指针引用
    另外如果你打算在同一个socket实现分流(客户端与服务端只有一个连接),建议你定义数据协议,在协议上实现分流,分布操作。

    点赞 评论

相关推荐 更多相似问题