java socket 客户端 非阻塞_java通信:客户端用非阻塞的socketChannel 服务器使用serversocket 能否正常通信?...

客户端用非阻塞的socketChannel服务器使用serversocket为什么会在服务端接收客户端数据时报Socketclosed?1Socket客户端和ServerSocket服务器--------读写正常2SocketChannel和Server...

客户端用非阻塞的socketChannel 服务器使用serversocket 为什么会在服务端接收客户端数据时报Socket closed?

1 Socket 客户端和ServerSocket 服务器 --------读写正常

2 SocketChannel 和ServerSocketChannel --------读写正常

3 NIO的客户端(SocketChannel且socketChannel.configureBlocking(false);)连接普通的serversocket服务器 会在服务端报Socket closed 这是什么原因呢? 使用的代码都是网上非常常见的NIO后IO的通信实例

java.io.EOFException

at java.io.DataInputStream.readFully(Unknown Source)

at java.io.DataInputStream.readUTF(Unknown Source)

at java.io.DataInputStream.readUTF(Unknown Source)

at ReadHandlerThread.run(Server.java:78)

at java.lang.Thread.run(Unknown Source)

java.net.SocketException: Socket closed

at java.net.SocketOutputStream.socketWrite(Unknown Source)

at java.net.SocketOutputStream.write(Unknown Source)

at java.io.DataOutputStream.write(Unknown Source)

at WriteHandlerThread.run(Server.java:137)

客户端:

socketChannel = SocketChannel.open();

SocketAddress socketAddress = new InetSocketAddress("localhost", 8000);

socketChannel.connect(socketAddress);

socketChannel.configureBlocking(false);

sendData(“11111111”);

receiveData(socketChannel);

服务端:起两个线程分别处理接收和发送

Socket client = serverSocket.accept();

// 一个客户端连接就开户两个线程处理读写

new Thread(new ReadHandlerThread(client)).start();

new Thread(new WriteHandlerThread(client)).start();

dis = new DataInputStream(client.getInputStream());String reciver = dis.readUTF();

展开

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值