chatserver.java

来自「由浅入深的介绍JAVAse的基本编程思想」· Java 代码 · 共 67 行

JAVA
67
字号
import java.io.*;
import java.net.*;
import java.util.*;
public class ChatServer {
	public static void main(String args[]) {
		Hashtable<String,DataOutputStream> userList = new Hashtable<String,DataOutputStream>(); 
		String name;
		DataInputStream dis;
		DataOutputStream dos;
		try{
			ServerSocket ss = new ServerSocket(9999);
			while(true){
				Socket s = ss.accept();	
				dis = new DataInputStream(s.getInputStream());
				dos = new DataOutputStream(s.getOutputStream());
				name = dis.readUTF();
				userList.put(name,dos);
				new MyServerReader(name,dis,userList).start();
			}
		}catch(Exception e){
			e.printStackTrace();	
		}
	}
}

class MyServerReader extends Thread{
	private String name;
	private DataInputStream dis;
	private Hashtable<String,DataOutputStream> userList;
	public MyServerReader(String name,DataInputStream dis,Hashtable<String,DataOutputStream> userList ){
		this.name = name;
		this.dis = dis;	
		this.userList = userList;
	}
	public void run(){
		String info;
		try{
			transmitMessage(name + " in!","--Server Info--");	
			while(true){
				info = dis.readUTF();
				if(info.equals("bye")){
					DataOutputStream dos = (DataOutputStream)(userList.get(name));
					Thread.sleep(1000);
					dos.close();
					dis.close();
					userList.remove(name);
					transmitMessage(name + " out!","--Server Info--");	
					break;
				}else if(info.length()>0){
					transmitMessage(info,name);	
				}
			}		
		}catch (Exception e) {
		}
	} 
	public void transmitMessage(String msg,String name){
		Collection doses = userList.values();
		DataOutputStream dos;
		for(Object o: doses){
			dos = (DataOutputStream)o;
			try{
				dos.writeUTF(name + ":" + msg);
			}catch(Exception e){
			}
		}			
	}		
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?