📄 icqserver.java
字号:
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 + -