黑化肥挥发会发灰
2017-12-18 10:31
采纳率: 25%
浏览 2.7k
已采纳

关于Socket与SocketChannel的数据读写问题?

客户端读不到数据??一直处于阻塞状态...问题在服务器端还是客户端?
服务器端发送数据:

 Iterator<SocketChannel> it=clients.iterator();
                    System.out.println(clients.size());
                    while(it.hasNext()){
                        SocketChannel channel=it.next();
                        System.out.println("send message to"+channel.socket().getInetAddress()+":"+content.toString());
                        channel.write(ByteBuffer.allocate(content.length()+2).put((content.toString()+"\r\n").getBytes()));
                    }

客户端读数据:
注意:客户端是使用的Socket,服务器使用的是Channel

 public void run() {
        BufferedReader br = null;
        try {
            br = new BufferedReader(new InputStreamReader(
                    socket.getInputStream()));
            while (!stop) {
                System.out.println(br.readLine());
                System.out.println("end");
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            Resources.close(br);
        }
    }
  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

3条回答 默认 最新

  • danielinbiti 2017-12-18 14:03
    已采纳
     服务器端的buf的write是需要循环的
    
    点赞 打赏 评论
  • 黑化肥挥发会发灰 2017-12-19 01:16

    还是不对,服务端用非阻塞的方式写入SocketChannel,在客户端能用socket读吗?有没有可行性?

    点赞 打赏 评论
  • 黑化肥挥发会发灰 2017-12-19 01:46

    你是对的,原来是我粗心改错了,Socket和Channel是可以相互通信的!

    点赞 打赏 评论

相关推荐 更多相似问题