Java NIO编写Socket服务器的一个例子

本文介绍了使用Java NIO编写Socket服务器的三种模式,并详细讲解了如何利用NIO实现异步IO处理,以减少资源消耗。通过示例程序展示了如何接收客户端请求,包括回显文本和发送文件内容。同时,指出了编写过程中常见的错误及其解决方案,如不当的缓冲区操作和异常处理方式。
摘要由CSDN通过智能技术生成

Java中编写Socket服务器,通常有一下几种模式:

1. 一个链接一个线程;优点:程序编写简单; 缺点:如果链接非常多,分配的线程会非常多,机器可能资源耗尽而崩溃。

2.把每一个新链接,交接给一个拥有固定数量线程的连接池;优点:程序编写相对简单,可以处理大量的链接。确定:线程的开销非常大,链接很多的情况,排队现象会比较严重。

3. 使用Java中NIO,用异步IO方式处理。这种模式,可以用一个线程,处理大量的链接。


下面使用java中NIO,编写一个Socket服务器程序。要使用java中NIO,必须掌握下面几个概念: ByteBuffer, Channel, Selector和SelectionKey。

这里就不介绍这些基本概念了,网上资料很多。


下面程序接收客户端输入一行文本(以“\r\n”)结束,并向客户端回显输入的文本。如果输入的文本是 “get file:xxxx”模式,则把“xxxx” 解析为服务器class path下的一个文件,如果找到该文件,则回显该文件的内容,如果找不到文件,回显文件不能找到的消息。

import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.URL;
import java.nio.ByteBuffer;
import java.nio.channels.SelectionKey;
import java.nio.channels.Selector;
import java.nio.channels.ServerSocketChannel;
import java.nio.channels.SocketChannel;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Iterator;
import java.util.Set;

public class NIOServer {
	private static final Charset DEFAULT_CHARSET = StandardCharsets.ISO_8859_1;

	private static final int BUFFER_SIZE = 1024;

	private int port = 8081;

	public NIOServer(int port) {
		this.port = port;
	}

	public NIOServer() {
	}

	public void start() {
		ServerSocketChannel ssc = null;
		try {
			ssc = Ser
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值