内蒙古农业大学学士学位论文 17
//接受文件
private void receiveFileHandle(Request req) { }
//发送消息
private void sendMessageHandle(Request req) {
Response res=new Response(RequestType.receiveMessage); Message message=null; try { }
User to=message.getTo(); if(to==null){
sendToAllUser(res);//如果收信人为null,则发送信息给所有人 //发送信息给to和他自己
Response res1=new Response(RequestType.individualTalk); res1.setData(message); ObjectOutputStream o=null;
Set
User u=(User)it.next(); if(u.equals(to)){
o=ServerMainClass.userMap.get(u).getOos(); break;
}else{
message=(Message)ois.readObject(); res.setData(message); e.printStackTrace(); e.printStackTrace();
} catch (IOException e) {
} catch (ClassNotFoundException e) {
}
内蒙古农业大学学士学位论文 18
}
}
try { }
o.writeObject(res1); o.flush();
e.printStackTrace();
} catch (IOException e) {
//下线
private void offlineHandle() { }
private void registerHandle() { } //登录
private void loginHandle(Request req) {
Long id=Long.parseLong((String)req.getData(\User user=dao.addUser(); try { }
oos.writeObject(user);
System.out.println(user.getId()+\oos.flush();
e.printStackTrace(); try { }
ServerMainClass.userMap.remove(user);
Response res=new Response(RequestType.offline); res.setData(user);//把下线用户发送给所有客户端 sendToAllUser(res); s.close();
e.printStackTrace();
} catch (IOException e) {
} catch (IOException e) {
内蒙古农业大学学士学位论文 19
息
String pwd=(String)req.getData(%user=dao.getUser(id,pwd); Response res; try {
Set
res=new Response(RequestType.online); res.setData(user); oos.writeObject(res); oos.flush(); }
e.printStackTrace();
给刚上线用户发送在线用户列表
Set
oos.flush();
sendToAllUser(res);//通知在线用户有新用户上线
ServerMainClass.userMap.put(user, onlineUser);//保存用户信
oos.writeObject(it.next());
if(user!=null){
User u=(User)iter.next(); if(u.equals(user)){
res=new Response(RequestType.haveOnline); oos.writeObject(res); oos.flush();
return;//该用户已经在线
}
//
} catch (IOException e) {
内蒙古农业大学学士学位论文 20
}
}
}
private void sendToAllUser(Response res){ }
try { }
Collection c= ServerMainClass.userMap.values(); Iterator it=c.iterator(); while(it.hasNext()){ }
e.printStackTrace();
ObjectOutputStream o=((OnlineUser)it.next()).getOos(); o.writeObject(res); o.flush();
} catch (IOException e) {
(2)客户程序模块
客户通过Socket(InetAddress,port)建立与服务器的连接。服务器与客户都通过构造ObjectInputStream,ObjectOutputStream来建立输入输出流,然后双方通过该输入输出流来相互传递信息,一旦收到客户方的连接请求,服务器accept()方法返回一个新建的Socket对象。客户端然后向服务器发送消息,比如文件传输等,服务器收到来自客户的请求后,针对不同的消息处理请求。具体的源码如下: package qq.client;
import java.awt.Color; import java.io.EOFException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import javax.swing.JOptionPane; import javax.swing.JTextPane;
import javax.swing.text.BadLocationException;
内蒙古农业大学学士学位论文 21
import javax.swing.text.SimpleAttributeSet; import javax.swing.text.StyleConstants; import java.net.*; import java.util.Calendar;
import qq.client.panel.UserListPanel;
import qq.client.windows.IndividualTalkWindow; import qq.entity.*;
public class ClientThread extends Thread{
@Override
private ObjectInputStream ois; private ObjectOutputStream oos; private Socket s;
private JTextPane receive; private JTextPane record; private JTextPane publicInfo; private UserListPanel userList; private SimpleAttributeSet set;
public ClientThread(JTextPane receive, JTextPane record, JTextPane }
this.receive = receive; this.record = record;
this.publicInfo = publicInfo; this.userList = userList; s=ClientMainClass.socket; ois=ClientMainClass.ois; oos=ClientMainClass.oos; set=new SimpleAttributeSet(); StyleConstants.setFontSize(set, 16); StyleConstants.setFontFamily(set,\宋体\
StyleConstants.setForeground(set, new Color(0,139,139));
publicInfo, UserListPanel userList) {