📄 chatserver.java
字号:
/**
*
*/
package jclass;
import java.io.*;
import java.net.*;
import java.util.*;
/**
* @author gz0804
*
*/
public class ChatServer {
//这个map用来存放用户名和相应的socket
private static Map<String,Socket> map=new HashMap<String, Socket> ();
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
ServerSocket ss=null;
ChatServer cs=new ChatServer();
try {
//建立服务器连接
ss=new ServerSocket(8080);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("abc");
//服务器要一直工作,不停地监视传进来的连接
while(true)
{
try {
Socket socket=ss.accept();
InputStream is=socket.getInputStream();
BufferedReader br=new BufferedReader(
new InputStreamReader(is));
String name=br.readLine();
//当用户名非空时,放到map里,并创建新进程处理
if(name!=null&&!name.equals(""))
{
map.put(name,socket);
}
new Thread(cs.new HandleSocket(name,socket)).start();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
//处理客户信息的进程
private class HandleSocket implements Runnable
{
Socket socket;
String username;
public HandleSocket(String username,Socket socket)
{
this.username=username;
this.socket=socket;
}
public void run()
{
InputStream is=null;
BufferedReader br=null;
String msg="";
//获取输入流
try {
is=socket.getInputStream();
br=new BufferedReader(new InputStreamReader(is));
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
//当有信息传入服务器时,发送到每个用户
whileLabel:while(true)
try {
//读取信息
msg=br.readLine();
//发送信息
sendMessage(msg);
} catch (Exception e) {
// TODO: handle exception
//连接断开时,移除socket,并且停止当前进程
map.remove(username);
break whileLabel;
}
}
}
//向用户发送信息
private void sendMessage(String msg)
{
//尝试取出map里的每一个socke,并向其发送信息
try {
for(Socket so:map.values())
{
PrintWriter pw=new PrintWriter(so.getOutputStream());
pw.println(msg);
pw.flush();
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -