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(); 展开
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(); 展开
2014-09-01 · 知道合伙人数码行家
关注
展开全部
您好,提问者:
首先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连接?
追答
对,执行完毕就关闭了
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询