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

客户端用非阻塞的socketChannel服务器使用serversocket为什么会在服务端接收客户端数据时报Socketclosed?1Socket客户端和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();
展开
 我来答
小童鞋_成er
2014-09-01 · 知道合伙人数码行家
小童鞋_成er
知道合伙人数码行家
采纳数:4650 获赞数:22879
主要从事J2EE工作,热爱Java,用心讨论技术,共同进步。

向TA提问 私信TA
展开全部

您好,提问者:

    首先IOException:Socket closed这个错误表示数据发送完毕后客户端或者服务器已经关闭了,也就是.close()了。一般是没有while(true)之类。

    其次java.io.EOFException这个错误是指发送的数据始终没有读到结尾,socket读写方式是以\r\n方式进行结束的,Socket有一个方法,如下代码:

shutdownInput() 
          此套接字的输入流置于“流的末尾”。
//当数据发送时,最后调用一下这个方法,已告诉ServerSocket我已经发送完毕,不要继续读了
追问
NIO的客户端(SocketChannel且socketChannel.configureBlocking(false);)连接普通的serversocket服务器 是否能正常通讯
configureBlocking(false);设置这个后服务器端总是执行一次读或写后报Socket closed 是不是非阻塞的客户端会自动close连接?
追答
对,执行完毕就关闭了
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式