📄 jimserver.java
字号:
package com.jim.server;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.HashMap;
import org.apache.log4j.Logger;
import com.jim.net.Connection;
public class JIMServer {
/**
* 一个持有了和所有用户的连接HashMap。当用户成功登录时就
* 将用户和服务器的连接以用户的登录号码为key放入这个HashMap中。
* 当用户注销时就移除该用户和服务器之间的连接。
*/
protected static HashMap<Integer,Connection> connections = new HashMap<Integer,Connection>();
/**
* 保存了服务器端和客户端交互的所有线程。只要有一个连接经来就
* 新创建一个线程并运行。知道用户退出,这个线程才结束。
*/
protected static HashMap<String,Thread> serverThreads = new HashMap<String,Thread>();
/**
* 这个ServerSocket专门负责接收客户端的连接,并返回一个Socket
*/
private static ServerSocket controller;
/**
* 用于为线程命名。
*/
private static int thCount = 0;
/**
* 负责日志的处理。便于调试。
*/
private static Logger log = Logger.getLogger(JIMServer.class);
/**
* 默认的服务器端口。
*/
private static int port = 9001;
public static void main(String[] args){
try {
//实例化这个ServerSocket
controller = new ServerSocket(port);
log.info("server start. waiting connection on port" + port);
//这里使用一个无限循环来不断的接收客户端的连接
while(true){
//等待一个客户端传入的连接,主线程阻塞在这里。
Socket s = controller.accept();
log.info("get a socket connection in server: "+s);
//创建一个连接对象。
Connection con = new Connection(s);
con.setBusy(false);
//创建一个新的响应线程。
ServerThread sTh = new ServerThread(con,connections);
sTh.setName("ServerThread_"+ (thCount++));
serverThreads.put(sTh.getName(), sTh);
sTh.start();
log.info("a new server thread started :"+sTh.getName());
}
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -