|
|
|
| |
用户登录时通过类datagrampacket和datagramsocket创建udp包括其本地接受端口以及发送端口,默认端口为5000和5001,通过取得的好友的ip地址来向好友发送消息(send(datagrampacket)和接受消息(receive(datagrampacket))。当用户通过udp收到消息后,可以通过datagrampacket的方法inetaddress getaddress()得到对方的ip地址,通过对好友列表比较以判断是谁并提示用户收到某某的消息,然后用户选择该用户查看消息,如果好友列表没有该人就显示收到陌生人的消息。用户可以按陌生人按钮查看消息。
用户注册。当服务器收到用户的注册请求,便开始接受客户传第的信息,诸如客户的呢称啦,性别,籍贯,头像,个人资料等,接受完毕后,便通过jdbcodbc与后台数据库连接,然后向数据库添加记录,如果成功,便向客户返回其jicq号码,并在数据库中注册用户的ip地址,然后更新其status为1即用户在线。客户收到服务器返回的信息后,便打开主程序窗口,并同时开始创建udp以便在用户之间建立联系。
******部分程序如下:
void jbutton1_mouseclicked(mouseevent e) {
try{
socket socket=new socket(inetaddress.getbyname(sername),serverport);//连接服务器
bufferedreader in=new bufferedreader(new inputstreamreader(socket.getinputstream()));
printwriter out=new printwriter(new bufferedwriter(
new outputstreamwriter(socket.getoutputstream())),true);
out.println("new");//告诉服务器我要注册
out.println(nickname.gettext().trim());//告诉服务器我的呢称,密码,email,资料
out.println(password.getpassword());//以及头像号等信息
out.println(email.gettext().trim());
out.println(info.gettext().trim());
out.println(place.getselecteditem());
out.println(headpic.getselectedindex());//head picindex
int no;
no=integer.parseint(in.readline());
//system.out.print(no);
string str=" ";
str=in.readline().trim();//从服务器取得状态
if(str.equals("false"))
joptionpane.showmessagedialog(this,"对不起,出错了:- (","ok",joptionpane.information_message);//失败就警告
else{//成功就打开主程序
joptionpane.showmessagedialog(this,"your javaicq#is"+no,"ok",joptionpane.information_message);
this.dispose();
mainwin f2=new mainwin(no,sername,serverport);
f2.setvisible(true);}
//system.out.println("\n");
//}while(!str.equals("ok"));
// socket.close();
}catch(ioexception e1){}
}
}
用户登录。在客户端,用户输入其jicq号码和密码,然后建立与服务器的连接,告诉服务器我要登录,服务器收到后,开始通过jdbcodbc读取数据库,然后与用户输入的信息比较,如果相同就向客户返回成功消息并将其status字段设为1表示上线了以及注册其ip地址,否则返回错误,如果客户收到成功信息就打开主窗口,否则提示出错。如果成功,便打开主程序窗口,并同时开始创建udp以便在用户之间建立联系。然后客户向服务器请求读取好友名单,服务器收到该请求,开始读取数据库中的friend表,得到好友的号码后,再在icq表中读取好友资料,然后向客户端发送这些信息,客户收到后就在主窗口显示好友,比如头像,呢称。并且建立几个矢量(vector)用以存储好友的呢称,jicq号码,头像编号,ip地址等信息。
部分程序如下:(程序流程图与注册差不多,略)
void login_mouseclicked(mouseevent e) {
try{socket socket=new socket(inetaddress.getbyname(server),serport);//与服务器连接
bufferedreader in=new bufferedreader(new inputstreamreader(socket.getinputstream()));//创建//输入流
printwriter out=new printwriter(new bufferedwriter(
new outputstreamwriter(socket.getoutputstream())),true); //创建输出流
out.println("login");//告诉服务器我要登录
out.println(jicq.gettext()); //告诉服务器我的号码
out.println(password.getpassword()); //告诉服务器我的密码
string str=" ";
//do{
str=in.readline().trim();//取得服务器发过来的消息
if(str.equal上一页 [1] [2] [3] [4] [5] [6] [7] [8] 下一页 |
|
|
|
|
|