Netty学习4—NIO服务端报错:远程主机强迫关闭了一个现有的连接

1 发现问题

NIO编程中服务端会出现报错

Exception in thread "main" java.io.IOException: 远程主机强迫关闭了一个现有的连接。
	at sun.nio.ch.SocketDispatcher.read0(Native Method)
	at sun.nio.ch.SocketDispatcher.read(SocketDispatcher.java:25)
	at sun.nio.ch.IOUtil.readIntoNativeBuffer(IOUtil.java:233)
	at sun.nio.ch.IOUtil.read(IOUtil.java:206)
	at sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:207)
	at com.rb.socket.nio.server.n.NIOServer.handleKey(NIOServer.java:87)
	at com.rb.socket.nio.server.n.NIOServer.listen(NIOServer.java:57)
	at com.rb.socket.nio.server.n.NIOServer.main(NIOServer.java:122)

主要原因是客户端强制关闭了连接(没有调用SocketChannel的close方法),服务端还在read事件中,此时读取客户端的信息时会报错。

2 解决问题

服务器读取事件增强健壮性:

	public void handelerRead(SelectionKey key) throws IOException {
		// 服务器可读取消息:得到事件发生的Socket通道
		SocketChannel channel = (SocketChannel) key.channel();
		// 创建读取的缓冲区
		ByteBuffer buffer = ByteBuffer.allocate(1024);
		int read = channel.read(buffer);
		if (read > 0) {
			byte[] data = buffer.array();
			String msg = new String(data).trim();
			System.out.println("服务端收到信息:" + msg);

			// 回写数据, 将消息回送给客户端
			ByteBuffer outBuffer = ByteBuffer.wrap("好的".getBytes());
			channel.write(outBuffer);
		} else {
			System.out.println("客户端关闭");
			key.cancel();
		}
	}

原贴地址:http://www.myexception.cn/program/1059786.html

时间: 2024-10-30 10:31:10

Netty学习4—NIO服务端报错:远程主机强迫关闭了一个现有的连接的相关文章

为什么.net的程序本身执行,运行没任何问题,但部署到IIS中的时候报“远程主机强迫关闭了一个现有的连接。 ”,未开启防火墙。

问题描述 为什么.net的程序本身执行,运行没任何问题,但部署到IIS中的时候报"远程主机强迫关闭了一个现有的连接.",未开启防火墙. 解决方案 解决方案二:很明显,程序和数据连接出了问题解决方案三:远程主机强迫关闭了一个现有的连接.未开启防火墙.1.IIS设置最大连接池,有可能链接的过多,SqlConnection后要Dispose2.trycatch具体看看报出的异常是什么解决方案四:问题是本地运行没任何问题,只是部署到IIS会出现问题解决方案五:权限,路径是否正确.

TortoiseSVN 报错:远程主机强迫关闭了一个现有的连接

问题描述 解决方案 解决方案二:自己先顶一个,快点来接分解决方案三:http://blog.csdn.net/csethcrm/article/details/8823577希望有帮助解决方案四:之前自己配置的时候也遇到过,貌似是配置问题解决方案五:求助....解决方案六:把所有信息全部clean掉,就可以了.

cxf webservice客户端和服务端报错

问题描述 cxf webservice客户端和服务端报错 服务端报错: Caused by: org.apache.catalina.connector.ClientAbortException: java.io.IOException: Connection reset by peer org.apache.cxf.binding.soap.SoapFault: Error writing to XMLStreamWriter. at org.apache.cxf.binding.soap.i

Netty学习5-Netty3.X服务端与客户端

Server1 import java.net.InetSocketAddress; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import org.jboss.netty.bootstrap.ServerBootstrap; import org.jboss.netty.channel.ChannelPipeline; import org.jboss.netty.ch

eclipse根据WSDL生成客户端,再生成服务端报错, JAX-RPC 1.1 specification

does not comply to one or more requirements of the JAX-RPC 1.1 specification, and may not deploy or function correctly. 纯洁化实体BEAN即可,注释掉代码   public static org.apache.axis.encoding.Serializer getSerializer(            java.lang.String mechType,       

jms 客户端SSL连MQ本地服务端报错

问题描述 MQJE001:完成代码为'2',原因为'2396'.com.ibm.msg.client.jms.DetailedJMSException:JMSFMQ6312:JavaMQI中发生异常.JavaMQI已抛出描述该问题的异常.请参阅链接的异常以获取进一步的信息.atsun.reflect.NativeConstructorAccessorImpl.newInstance0(NativeMethod)atsun.reflect.NativeConstructorAccessorImpl

《Netty 权威指南》—— 服务端序列图

声明:本文是<Netty 权威指南>的样章,感谢博文视点授权并发编程网站发布样章,禁止以任何形式转载此文. 下面,我们对NIO服务端的主要创建过程进行讲解和说明,作为NIO的基础入门,我们将忽略掉一些在生产环境中部署所需要的一些特性和功能. 步骤一:打开ServerSocketChannel,用于监听客户端的连接,它是所有客户端连接的父管道,代码示例如下: 1 ServerSocketChannel acceptorSvr = ServerSocketChannel.open(); 步骤二:绑

handler-android使用netty框架与PC服务端通信,接收到内容与发送内容不同

问题描述 android使用netty框架与PC服务端通信,接收到内容与发送内容不同 例如PC端发送888,android端却收到888后面还跟着一大串以前测试时候的内容, 部分代码如下,复制时括号有些错乱请勿在意: Bootstrap configureBootstrap(Bootstrap b, EventLoopGroup g) { b.group(g) .channel(NioSocketChannel.class) .remoteAddress(parements.getString(

windows 服务-(急)win7 C# .NET Framework 4.0 windows服务启动报错1053

问题描述 (急)win7 C# .NET Framework 4.0 windows服务启动报错1053 我本地有两个windows服务,一个是2.0框架,一个4.5框架.2.0框架的服务用对应的方法去安装启动没有任何问题(C:WindowsMicrosoft.NETFrameworkv2.0.50727InstallUtil.exe).4.5框架的项目用4.0(C:WindowsMicrosoft.NETFrameworkv4.0.30319InstallUtil.exe)安装成功,启动报10