基于java平台设计--服务器_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > 基于java平台设计--服务器

基于java平台设计--服务器

 2012/2/22 9:20:05  yongjian1092  程序员俱乐部  我要评论(0)
  • 摘要:importjava.net.*;importjava.util.*;importjava.io.*;publicclassChatServer{publicstaticvoidmain(String[]args){Hashtable<String,DataOutputStream>userList=newHashtable<String,DataOutputStream>();DataInputStreamdis;DataOutputStreamdos
  • 标签:Java 服务器 服务 Java平台 设计
import java.net.*;
import java.util.*;
import java.io.*;


public class ChatServer
{
	public static void main(String[] args)
	{
		Hashtable<String,DataOutputStream> userList = new Hashtable<String,DataOutputStream>();
		DataInputStream dis;
		DataOutputStream dos;
		String name;
		
		try
		{
			ServerSocket ss = new ServerSocket(9978);
			while(true)
			{
				Socket s = ss.accept();
				dis = new DataInputStream(s.getInputStream());
				dos = new DataOutputStream(s.getOutputStream());
				name = dis.readUTF();
				userList.put(name,dos);
				new Server(name,userList,dis,dos).start();
			}
		}
		catch(Exception e)
		{
			e.printStackTrace();
		}
	}		
		
}


class ClientInformation
{
	public static int num = 0;
	public static String desknum[] = new String[10]; 
	public static String name[] = new String[10];
	public static String headicon[] = new String[10];
}


class Server extends Thread
{
	private Hashtable<String,DataOutputStream> userList;
	private DataInputStream dis;
	private DataOutputStream dos;
	private DataOutputStream dos2;
	private String name;
	private String name2;
	private String info;
	private String iconstring;
	private String iconstring2;
	private String desknum;
	private String desknum2;
	private boolean judue = false;
	
	public Server(String name,Hashtable<String,DataOutputStream> userList,DataInputStream dis, DataOutputStream dos)
	{
		this.name = name;
		this.dis = dis;
		this.userList = userList;
		this.dos = dos;
	}
	
	public void run()
	{
		try
		{
			if(ClientInformation.num > 0)
			{			
				String s = String.valueOf(ClientInformation.num);		
					try{
						dos.writeUTF("comein");
						dos.writeUTF(s);
						for(int i = 0; i < ClientInformation.num; ++i)
						{																									
							dos.writeUTF(ClientInformation.desknum[i]);			
							dos.writeUTF(ClientInformation.name[i]);
							dos.writeUTF(ClientInformation.headicon[i]);							
						}													
					}
					catch(Exception e)
					{
						e.printStackTrace();
				   }
			}
			transimitMessage(name+"进入大厅","服务器信息  ");
			while(true)
			{
				info = dis.readUTF();
				if(info.equals("exit")){
					DataOutputStream dos = (DataOutputStream)(userList.get(name));
					dos.close();
					dis.close();
					userList.remove(name);
					Collection doses = userList.values();
					if(judue)
					{
						for(int i = 0; i < ClientInformation.num; ++i)
						{
							if(name == ClientInformation.name[i])
							{
								String Temp;
								Temp = ClientInformation.desknum[i];
								ClientInformation.desknum[i] = ClientInformation.desknum[ClientInformation.num - 1];
								ClientInformation.desknum[ClientInformation.num - 1] = Temp;
								
								Temp = ClientInformation.name[i];
								ClientInformation.name[i] = ClientInformation.name[ClientInformation.num - 1];
								ClientInformation.name[ClientInformation.num - 1] = Temp;
								
								Temp = ClientInformation.headicon[i];
								ClientInformation.headicon[i] = ClientInformation.headicon[ClientInformation.num-1];
								ClientInformation.headicon[ClientInformation.num - 1] = Temp;
								
								ClientInformation.num--;
								break;
							}
						}
						for(Object o:doses)
						{
							dos = (DataOutputStream)o;
							try{
								dos.writeUTF("exit");
								dos.writeUTF(desknum);
							}catch(Exception e){
								e.printStackTrace();
							}
						}
					}
					transimitMessage(name+"退出大厅","服务器信息 ");
					break;
				}
				else if(info.equals("sit"))
				{
					String OutPutString;
					desknum = dis.readUTF();
					iconstring = dis.readUTF();
					int DeskNum = Integer.parseInt(desknum);
					if(DeskNum <= 10)
					{
						OutPutString = String.valueOf(DeskNum);
						desknum2 = String.valueOf(DeskNum + 10);
					}
					else
					{
						OutPutString = String.valueOf(DeskNum - 10);
						desknum2 = OutPutString;
					}				
					transimitMessage_sit(name+"进入"+OutPutString+"号桌子","服务器信息 ");
					
				}
				else if(info.equals("move"))
				{
					name2 = dis.readUTF();
					int H_YS =dis.readInt();
					int H_XS = dis.readInt();
					int B_YS = dis.readInt();
					int B_XS = dis.readInt();
					boolean Rule = dis.readBoolean();
					transimitMessageMove(H_YS, H_XS, B_YS, B_XS, Rule);
				}
				else if(info.equals("Chat"))
				{
					
					name2 = dis.readUTF();
					String Chat = dis.readUTF();
					dos2 = userList.get(name2);
					try
					{
						dos2.writeUTF("Chat");
						dos2.writeUTF(Chat);
					}
					catch(Exception e)
					{
						e.printStackTrace();
					}
				}
				else if(info.equals("Start"))
				{
					name2 = dis.readUTF();
					dos2 = userList.get(name2);
					try
					{
						dos2.writeUTF("Start");
					}
				   catch(Exception e)
				   {
					   e.printStackTrace();
				   }
				}
			}
		}
		catch(Exception e)
		{
			e.printStackTrace();
		}
	}
	
	public void transimitMessage(String msg,String SeverInf)
	{
		Collection doses = userList.values();
		DataOutputStream dos;
		for(Object o:doses)
		{
			dos = (DataOutputStream)o;
			try
			{
				dos.writeUTF(SeverInf+":"+msg);				
			}
			catch(Exception e)
			{
				e.printStackTrace();
			}
		}
	}
	
	public void transimitMessage_sit(String msg,String SeverInf)
	{
		try
		{
			Collection doses = userList.values();
			DataOutputStream Dos;
			int ZNum = ClientInformation.num;
			int DeskNum = Integer.parseInt(desknum);
							
			boolean Otherplayer = false;
			boolean JudgeDN = true;
			
			for(int i = 0; i < ZNum; ++i)
			{
				if(desknum.equals(ClientInformation.desknum[i]))
				{
					JudgeDN = false;
					break;	
				}
				else if(desknum2.equals(ClientInformation.desknum[i]))
				{
					Otherplayer = true;
					name2 = ClientInformation.name[i];
					iconstring2 = ClientInformation.headicon[i];
					dos2 = userList.get(name2);
				}
			}
			if(JudgeDN)
			{
				if(Otherplayer)
				{
					if(judue != true && name != name2)
					{
						try
						{
							dos.writeUTF("play");
							dos.writeUTF(name2);
							dos.writeUTF(iconstring2);
							dos2.writeUTF("play");
							dos2.writeUTF(name);
							dos2.writeUTF(iconstring);
						}
						catch(Exception e)
						{
							e.printStackTrace();
						}
					}
				}
				for(Object o:doses)
				{
					Dos = (DataOutputStream)o;
					try
					{
						Dos.writeUTF(SeverInf+":  "+msg);
						Dos.writeUTF(info);
						String Numstring = desknum;
						Dos.writeUTF(Numstring);
						Dos.writeUTF(name);
						Dos.writeUTF(iconstring);		
					}
					catch(Exception e)
					{
						e.printStackTrace();
					}
				}
				if(judue == true)
				{
					for(int i = 0; i < ZNum; ++i)
					{
						if(name == ClientInformation.name[i])
						{
							ClientInformation.desknum[i] = desknum;
							ClientInformation.name[i] = name;
							ClientInformation.headicon[i] = iconstring;
						}
					}
				}
				else
				{
					ClientInformation.desknum[ClientInformation.num] = desknum;
					ClientInformation.name[ClientInformation.num] = name;
					ClientInformation.headicon[ClientInformation.num] = iconstring;
					ClientInformation.num++; 
					judue = true;
				}
			}
		}
		catch(Exception e)
		{
			e.printStackTrace();
		}
		
	}
	
	public void transimitMessageMove(int H_YS, int H_XS, int B_YS, int B_XS, boolean Rule)
	{
		dos2 = userList.get(name2);
		try
		{
			dos2.writeUTF("Move");
			dos2.writeInt(H_YS);
			dos2.writeInt(H_XS);
			dos2.writeInt(B_YS);
			dos2.writeInt(B_XS);
			dos2.writeBoolean(Rule);
			
		}
		catch(Exception e)
		{
			e.printStackTrace();
		}
	}
}

?
发表评论
用户名: 匿名