1.服务器端代码
import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.ServerSocket;
import java.nio.ByteBuffer;
import java.nio.channels.Channel;
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.util.HashSet;
import java.util.Iterator;
import java.util.Set;
/**
* 聊天室服务器
* 网络多客户端聊天室
* 功能1: 客户端经过Java NIO链接到服务端,支持多客户端的链接
* 功能2:客户端初次链接时,服务端提示输入昵称,若是昵称已经有人使用,提示从新输入,若是昵称惟一,则登陆成功,以后发送消息都须要按照规定格式带着昵称发送消息
* 功能3:客户端登陆后,发送已经设置好的欢迎信息和在线人数给客户端,而且通知其余客户端该客户端上线
* 功能4:服务器收到已登陆客户端输入内容,转发至其余登陆客户端。
* @author 1
* @date Aug 22, 2016 4:02:01 PM
*/
public class ChatRoomServer {
/** 选择器 */
private Selector selector;
/*****端口号*****/
private final static int PORT=9900;
/*******在线统计人名或人数********/
private HashSet online = new HashSet();
/****编码*****/
private Charset charset = Charset.forName("UTF-8");
/****用户存在提示信息*****/
private static String USER_EXIST = "system message: user exist, please change a name";
/****至关于自定义协议格式,与客户端协商好*****/
private static String USER_CONTENT_SPILIT = "#@#";
public static void main(String[] args) {
try {
new ChatRoomServer().init();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 初始化服务器
* @author 1
* @throws IOException
*/
public void init() throws IOException{
//打开选择器
this.selector = Selector.open();
// 开启服务器端通道,