📄 chatserver.java
字号:
/**
* ClassName: ChatServer.java
* Author: qiujy
* CreateTime: 2008-7-28
* EMAIL: qjyong@gmail.com
* Copyright 2008 ++YONG All rights reserved.
*/
package com.bjjava.chat;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;
/**
* 聊天程序服务器端
* @author qiujy
*
*/
public class ChatServer {
//所以己连接上服务器的Socket集
private List<SOCKET> sockets = new ArrayList<SOCKET>();
public static void main(String[] args) {
ChatServer server = new ChatServer();
server.start();
}
//启动服务器
public void start() {
ServerSocket ss = null;
try {
ss = new ServerSocket(8888);
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("服务器已启动......");
while (true) {
try {
Socket socket = ss.accept();
sockets.add(socket);
System.out.println("有一客户端连上来了。。。");
//启动一个线程专门来跟这个客户端通信
Thread t = new Thread(new ChatServerRunner(socket, sockets));
t.start();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
//和客户端通信的线程
class ChatServerRunner implements Runnable {
private List<SOCKET> sockets;
private Socket currentSocket;
private BufferedReader in;
public ChatServerRunner(Socket currentSocket, List<SOCKET> sockets) {
this.sockets = sockets;
this.currentSocket = currentSocket;
}
@Override
public void run() {
String address = currentSocket.getInetAddress().getHostAddress() + ":" +
currentSocket.getPort();
try {
in = new BufferedReader(new InputStreamReader(currentSocket
.getInputStream()));
//循环获取客户端发送过来的信息,向每个客户端都转发一遍。。
while (true) {
String text = in.readLine();
if(text == null){
break;
}
System.out.println(address + "-" + text);
for(Socket temp : sockets){
PrintWriter out = new PrintWriter(temp.getOutputStream());
out.println(text);
out.flush();
}
}
} catch (IOException e) {
System.out.println(address+"客户端走了");
//e.printStackTrace();
} finally {
sockets.remove(currentSocket);
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -