⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 icqserver.java

📁 即时通讯
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
import java.io.*;
import java.net.*;
import java.util.*;
import java.util.Calendar;
import java.awt.*;
import java.awt.event.*;
import java.sql.*;
import java.lang.String;

public class ICQserver extends Frame implements Runnable
{
	static int TCP=7802,UDP=7803; 
	static ServerSocket server=null;
	static int counter;
	static Socket client;
	static TextArea ta;
	static TextField tf=null;
	static ICQserver f;
	static String ver="ver: 1.3.0507";
	
	static String  sqlURL  =  "jdbc:odbc:ICQdb";//myDB是dsn名
	static Hashtable icqThread;
	static boolean showLog=true;
	
	public ICQserver(String title)
	{
		//this.addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e){dispose();System.exit(0);}});
		setTitle(title);
	}
	
	public static void main(String args[])
	{
		icqThread=new Hashtable();
		f = new ICQserver("ICQ server "+ver);
		new Thread(f).start();
		//f.setIconImage(f.getToolkit().getImage("js.gif"));
		f.setSize(500,300);
		f.setLayout(new BorderLayout());
		ta=new TextArea();
		ta.setEditable(false);
		f.add("Center",ta);
		tf=new TextField();
		f.add("South",tf);
		f.show();
		
		errmsg("ICQ Server");
		errmsg("   designer 张鹏 by java.GUST workgroup."+ver);
		errmsg("   http://www.ebsee.com");
		errmsg("   Email:gustteac@netease.com\n");
		
		try
		{
			server=new ServerSocket(TCP);
			errmsg(server.toString());
			errmsg("Server is listening on port "+server.getLocalPort()+"\n\n");
			errmsg("请在下面命令行中输入系统命令.");

			for(;;)
			{
				client=server.accept();
				new Mission(client,counter).start();
				counter++;
			}
		}
		catch(Exception e){errmsg(" 端口正被别的程序使用,本程序不能工作,请检查服务器是否已\n经在运行,10秒钟后自动退出.");try{Thread.sleep(10*1000);}catch(InterruptedException ioe){}System.exit(1);}
		try{server.close();}catch (IOException e){ICQserver.errmsg("  When close the server error.serverException:"+e);}
	}
	public static void set(String icqNo,Mission t){icqThread.put(icqNo,t);}
	public static Mission get(String icqNo){return (Mission)(icqThread.get(icqNo));}
	public static void del(String icqNo){try{icqThread.remove(icqNo);}catch(Exception e){errmsg("  unregisty "+icqNo+" from hashtable error:"+e);}}

	public boolean handleEvent(Event evt)
	{
		switch (evt.id){
		case Event.WINDOW_DESTROY:
			//	{dispose();System.exit(0);return true;}
			errmsg("服务器正在运行,不能关闭。");
			break;
		default:
		}
		return super.handleEvent(evt);
	}
	public boolean keyUp(Event evt,int key)
	{
		if(key==10){
			try{
				String t=tf.getText().trim().toLowerCase();
				errmsg(t);
				int ch=request(t);
				switch(ch){
				case 3:dispose();System.exit(0);break;
				case 4:ta.setText("");break;
				case 5:showLog=false;break;
				case 6:showLog=true;break;
				case 7:
				case 8:help();break;
				case 9:errmsg(ver);break;
				case 10:if(t.indexOf(' ')!=-1)bc(t.substring(t.indexOf(' ')));break;
				case 12:count();break;
				default:errmsg("不能识别的命令.");
				}
			}catch(Exception e){errmsg("  ICQserver.keyUp() error:"+e);}
			tf.setText("");
		}
		return true;
	}
	
	int request(String s)
	{
		try{
			String cmd=null;
			if(s.length()==0)return -1;
			if(s.indexOf(' ')!=-1)cmd=s.substring(0,s.indexOf(' '));
			else cmd=s;
			if(cmd.equals("exit"))return 3;
			if(cmd.equals("clear"))return 4;
			if(cmd.equals("hide"))return 5;
			if(cmd.equals("show"))return 6;
			if(cmd.equals("help"))return 7;
			if(cmd.equals("?"))return 8;
			if(cmd.equals("ver"))return 9;
			if(cmd.equals("bc"))return 10;
			if(cmd.equals("count"))return 12;
			return -1;
		}catch(Exception e){errmsg("  ICQserver.request() error:"+e);return -1;}
	}
	void bc(String s)
	{
		if(icqThread.isEmpty())return;
		Enumeration e=icqThread.keys();
		while(e.hasMoreElements()){
			get(e.nextElement().toString()).addCmd("SYSMSG \n    系统消息:"+s);
		}
	}
	void help(){errmsg("\n ?      帮助\n help   帮助\n clear  清屏 \n quit   退出ICQ服务器\n ver    查看版本\n show   显示LOG信息.\n hide   关闭LOG信息.\n count  统计在线人数.\n");}
	void count(){errmsg(new Integer(icqThread.size()).toString());}
	static void errmsg(String s)
	{
		if(showLog==true){
			String time=new Integer(Calendar.getInstance().get(Calendar.HOUR_OF_DAY)).toString();
			time+=":"+new Integer(Calendar.getInstance().get(Calendar.MINUTE)).toString();
			String date=new Integer(Calendar.getInstance().get(Calendar.MONTH)+1).toString();
			date+="-"+new Integer(Calendar.getInstance().get(Calendar.DAY_OF_MONTH)).toString();

			ta.append("\n"+date+" "+time+"> "+s);ta.transferFocus();
		}
	}
	public void run()
	{
		boolean exitwhile=false;
		byte[] rMsg=new byte[300*2];
		String rMsgs=null;
		System.out.println("  start listen UDP...");
		DatagramSocket serverSocket=null;
		DatagramPacket dp=null;
		InetAddress ia=null;
		int clientPort=0;
		
		try{
			serverSocket=new java.net.DatagramSocket(UDP);
			dp=new DatagramPacket(rMsg,rMsg.length);
		}catch(SocketException se){se.printStackTrace();}

		while(exitwhile==false){
			try{
				serverSocket.receive(dp);
				
				ia=dp.getAddress();
				clientPort=dp.getPort();
				System.out.println("  UDP Ip:"+ia+" port:"+clientPort);
				
				rMsg=dp.getData();
				char c[]=new char[dp.getLength()/2];
				for(int i=0;i<dp.getLength()/2;i++)
				{c[i]=(char)(rMsg[i*2]<<8);c[i]=(char)((c[i]&0xff00)|(0x00ff&rMsg[i*2+1]));}
				rMsgs=new String(c);
				System.out.println("  UDP received:"+rMsgs);
				String sMsgs="UDPPORT port:"+clientPort;
				System.out.println("  sMsgs:"+sMsgs );
				udpSend(sMsgs,ia,clientPort);
			}catch(Exception e){e.printStackTrace();}
		}
		System.out.println("   udp receiver end.");
	}
	public void udpSend(String sMsgs,InetAddress ia,int clientPort)
	{
		DatagramSocket udpsocket=null;
		DatagramPacket dp=null;

		for(int i=0;udpsocket==null&&i<3;i++)//build udpSocket
			try{udpsocket=new DatagramSocket();}
			catch(Exception e){}
		if(udpsocket==null){System.out.println("   建立UDP发送端口时出错。");return;}

		//System.out.println("  the SMsg() sMsgs,length():"+sMsgs+","+sMsgs.length());
		byte[] sMsg=new byte[300*2];
		for(int i=0;i<sMsgs.length();i++){sMsg[i*2]=(byte)(sMsgs.charAt(i)>>8);sMsg[i*2+1]=(byte)sMsgs.charAt(i);}

		try{
			dp=new DatagramPacket(sMsg,sMsg.length,ia,clientPort);
			udpsocket.send(dp);
		}catch(Exception e){e.printStackTrace();}
		System.out.println("   UDP send to jicq.vicp.net:"+clientPort+":"+sMsgs);
	}	
}

class Mission extends Thread
{
	Socket client;
	int counter;
	String version;
	boolean offline=true,dupLogon=false,available=true;
	Vector outCmd;
	
	String  sqlURL  =  "jdbc:odbc:ICQdb";//myDB是dsn名
	Connection  con;
	Statement  stmt;
	ResultSet  rs;
	
	public Mission(Socket cl,int c)
	{
		client=cl;
		counter=c;
		outCmd=new Vector();
	}
	
	public void run()
	{
		try 
		{
			connDB();
			//String destIP=client.getInetAddress().toString();
			//int destport=client.getPort();
			//ICQserver.errmsg("client:"+client.toString());
			BufferedOutputStream bos=new BufferedOutputStream(client.getOutputStream());
			PrintStream outstream=new PrintStream(bos);

			BufferedInputStream bis=new BufferedInputStream(client.getInputStream());
			DataInputStream instream=new DataInputStream(bis);
			String in="";
			in=receivString(instream);
			//ICQserver.errmsg("   Received:\""+in+"\".");
			offline=false;
			
			switch(request(in)){
			case 0:join(in,instream,outstream);break;
			case 1:logon(in,instream,outstream);break;
			case 2:seek(in,instream,outstream);break;
			case 3:registy(in,instream,outstream);break;
			case 4:serverMon(in,instream,outstream);break;
			case 7:logout(in,instream,outstream);break;
			case 8:getme(in,instream,outstream);break;
			case 9:forward(in,instream,outstream);break;
			case 10:getID(in,instream,outstream);break;
			case 11:delFriend(in,instream,outstream);break;
			case 12:modify(in,instream,outstream);break;
			case 13:joined(in,instream,outstream);break;
			case 14:stranger(in,instream,outstream);break;
			default:sendString(outstream,"FAIL 未知命令。");/*ICQserver.errmsg("  received unknow cmd:\""+in+"\",from:"+client.getInetAddress());*/
			}//end switcch 
			
			closeDB();
			//ICQserver.errmsg("completed:"+client.getInetAddress()+" Port"+client.getPort());
			client.close();
		}
		catch(Exception e){ICQserver.errmsg("  Mission.run() error:"+e);}
	}
	
	int request(String s)
	{
		if(s==null)return -1;
		if(s.indexOf(' ')==-1)s+=" ";
		if(s.length()>0)
		{
			String cmd=s.substring(0,s.indexOf(' '));
			if(cmd.equalsIgnoreCase("JOIN")){return 0;}
			if(cmd.equalsIgnoreCase("LOGON")){return 1;}
			if(cmd.equalsIgnoreCase("SEEK")){return 2;}
			if(cmd.equalsIgnoreCase("REGISTY")){return 3;}
			if(cmd.equalsIgnoreCase("ONLINEMON")){return 4;}
			if(cmd.equalsIgnoreCase("LOGOUT")){return 7;}
			if(cmd.equalsIgnoreCase("GETME")){return 8;}
			if(cmd.equalsIgnoreCase("FORWARD")){return 9;}
			if(cmd.equalsIgnoreCase("GETID")){return 10;}
			if(cmd.equalsIgnoreCase("DELFRIEND")){return 11;}

⌨️ 快捷键说明

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