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

📄 icqserver.java

📁 用java做的icq,不错的啊!大家看看啊!
💻 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.lang.*;
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("请在下面命令行中输入系统命令.");
          
          while(true) 
          {
              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 
  {

⌨️ 快捷键说明

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