📄 icqserver.java
字号:
package cn.edu.buaa.scse.liyi.network.server;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.IOException;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.Date;
import java.util.Enumeration;
import java.util.Hashtable;
import java.util.List;
import cn.edu.buaa.scse.liyi.network.hibernate.bean.Messages;
import cn.edu.buaa.scse.liyi.network.hibernate.bean.User;
import cn.edu.buaa.scse.liyi.network.hibernate.dao.MessagesDAO;
import cn.edu.buaa.scse.liyi.network.hibernate.dao.UserDAO;
public class ICQServer
{
List<User> ulist=new ArrayList<User>();
public void startServer()
{
ServerSocket server=null;
Socket socket=null;
Hashtable<String,ServerThread> list; //存放与各聊天者客户端通信的服务器线程的散列表
list=new Hashtable<String,ServerThread>();
while(true)
{
try
{
server=new ServerSocket(9090);
}
catch(IOException e)
{
System.out.println("正在监听...");
}
try
{
socket=server.accept(); //建立和客户端的连接的套接字
InetAddress address=socket.getInetAddress();
System.out.println("用户的IP:"+address);
}
catch(IOException e)
{
}
if(socket!=null)
{
ServerThread thread=new ServerThread(socket,list);
thread.start(); //与该客户端通信的服务器,开始启动线程
}
else
{
continue;
}
}
}
public List<User> getOnlineList()
{
return this.ulist;
}
class ServerThread extends Thread
{
Socket socket=null;
File file=null;
DataOutputStream out=null;
DataInputStream in=null;
Hashtable<String,ServerThread> list=null;
String userid,username,ip;
public ServerThread(Socket socket,Hashtable<String,ServerThread> list)
{
this.socket=socket;
this.list=list;
try
{
in=new DataInputStream(socket.getInputStream());
out=new DataOutputStream(socket.getOutputStream());
}
catch(IOException e)
{
e.printStackTrace();
}
}
public void run()
{
MessagesDAO mDao=new MessagesDAO();
while(true)
{
String str;
try
{
str=in.readUTF();
if(str.startsWith("userid:"))
{
userid=str.substring(str.indexOf("userid:")+"userid:".length(),str.indexOf(";username:"));
username=str.substring(str.indexOf("username:")+"username:".length(),str.indexOf(";ip:"));
ip=str.substring(str.lastIndexOf("ip:")+"ip:".length());
ulist.add(new User(userid,username,"",ip,""));
list.put(userid,this);
Enumeration<ServerThread> enum0=list.elements();
while(enum0.hasMoreElements())
{
((ServerThread)enum0.nextElement()).out.writeUTF("userid:"+userid+";username:"+username+";ip:"+ip);
}
for(int i=0;i<ulist.size();i++)
{
if(!userid.equals(ulist.get(i).getUserid()))
out.writeUTF("userid:"+ulist.get(i).getUserid()+";username:"+ulist.get(i).getUsername()+";ip:"+ulist.get(i).getIp());
}
UserDAO uDao=new UserDAO();
if(uDao.getUser(userid)==null)
{
uDao.addUser(new User(userid,username,"",ip,""));
}
uDao.getSession().close();
}
else if(str.startsWith("message:"))
{
String msg=str.substring(str.indexOf("message:")+"message:".length(),str.lastIndexOf("userid:"));
String sender=str.substring(str.lastIndexOf("userid:")+"userid:".length());
mDao.addMessages(new Messages(sender,"",new Date(),msg));
Enumeration<ServerThread> enum0=list.elements();
while(enum0.hasMoreElements())
{
((ServerThread)enum0.nextElement()).out.writeUTF("message:"+msg);
}
}
else if(str.startsWith("file:"))
{
String receiver=str.substring(str.lastIndexOf(";receiver:")+";receiver:".length());
((ServerThread)list.get(receiver)).out.writeUTF(str.substring(0,str.lastIndexOf(";")));
byte[] buf=new byte[1024*1024];
int len=0;
if(in!=null)
{
len=in.read(buf);
}
((ServerThread)list.get(receiver)).out.write(buf,0,len);
((ServerThread)list.get(receiver)).out.flush();
}
}
catch(IOException e)
{
// TODO Auto-generated catch block
if(userid!=null)
list.remove(userid);
try
{
socket.close();
}
catch(IOException e1)
{
// TODO Auto-generated catch block
e1.printStackTrace();
}
break;
}
}
mDao.getSession().close();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -