Netty学习1—传统单线程服务端

1 代码

import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class OioServer1 {

	@SuppressWarnings("resource")
	public static void main(String[] args) throws Exception {
		// 创建socket服务,监听10101端口
		ServerSocket server = new ServerSocket(10101);
		System.out.println("服务器启动!");
		while (true) {
			// 获取一个套接字【阻塞】
			final Socket socket = server.accept();
			System.out.println("一个新客户端连接!");
			// 单线程业务处理
			handler(socket);
		}
	}

	/**
	 * 读取数据
	 */
	public static void handler(Socket socket) {
		try {
			byte[] bytes = new byte[1024];
			InputStream inputStream = socket.getInputStream();
			while (true) {
				// 读取数据【阻塞】
				int read = inputStream.read(bytes);
				if (read != -1) {
					System.out.println(new String(bytes, 0, read));
				} else {
					break;
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				System.out.println("socket关闭");
				// 必须将第1个客户端关闭,第2个客户端才可以连进来。否则只能为第1个客户端服务
				socket.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
}

2 测试流程

利用telnet 127.0.0.1 10101模拟客户端,一个cmd窗口就是一个客户端。断点设置在server.accept()和int read = inputStream.read(bytes)位置,按F6 Step Over发现流程被阻塞。必须将第1个客户端关闭,第2个客户端才可以连进来,否则只能为第1个客户端服务。

时间: 2024-09-26 09:21:48

Netty学习1—传统单线程服务端的相关文章

Netty学习2—传统多线程服务端

1 代码 import java.io.IOException; import java.io.InputStream; import java.net.ServerSocket; import java.net.Socket; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; /** * 传统socket服务端-多线程 */ public class OioServer2 {

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

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(I

《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(

ExtJs学习笔记(20)-利用ExtJs的Ajax与服务端WCF交互

ExtJs是一套非常不错的javascript UI库(第一次接触ExtJs的,可到官方网站http://www.extjs.com/deploy/dev/examples/samples.html看下示例.相信不少人会心动的),不仅组件丰富,效果漂亮,而且ExtJs集成的Ajax功能可以方便的与.Net的WCF进行交互. 这里我们将演示ExtJs的FormPanel从WCF加载数据,以及如何提交数据到WCF服务端 1.首先来定义一个用于传输信息的Class(实际开发中,可以是Linq to S

zeromq学习笔记2——简单的客户端和服务端测试程序

1.前言 zeromq提供了guide,http://zguide.zeromq.org/,可以帮助新手快速上手,提供了C\C++\PHP等多种语言. 2.测试程序 使用zeromq给的hwserver和hwclient的C语言测试程序. hwserver代码如下: 1 #include <stdio.h> 2 #include <unistd.h> 3 #include <string.h> 4 #include <assert.h> 5 #include

java netty做服务端在线用户对战匹配,手机客户端p2p方式通信

问题描述 服务端匹配在线用户怎么做,求大神给思路. 解决方案

[Java]如何提高Web服务端并发效率的异步编程技术?

[编者按]在Java里开发多线程最强有力的实践就是做服务端的并发处理,本文作者阐述了实施多线程的具体实践方法,要真的掌握某种技术你就必须要知其所以然.笔者转发至此,希望对Web开发者有所帮助. 全文如下: 作为一名Web工程师都希望自己做的Web应用能被越来越多的人使用,如果我们所做的Web应用随着用户的增多而宕机了,那么越来越多的人就会变得越来越少了,为了让我们的Web应用能有更多人使用,我们就得提升Web应用服务端的并发能力.那么我们如何做到这点了,根据现有的并发技术我们会有如下选择: 给服