用JAVA制作ICQ(3)
作者:佚名; 更新时间:2014-12-05
bc:javaicq\,\ \,\ \); //连接数据库,根据接受的用户号码及好友号码向好友表删除记录 int friendicqno=Integer.parseInt(in.readLine()); System.out.println(friendicqno); int myicqno=Integer.parseInt(in.readLine()); System.out.println(myicqno); String addfriend=\delete from friend where icqno=? and friend=?\; PreparedStatement prepare7=c7.prepareCall(addfriend); prepare7.clearParameters(); prepare7.setInt(1,myicqno); prepare7.setInt(2,friendicqno); int r7=0; r7=prepare7.executeUpdate(); if(r7==1) System.out.println(\ok delfrien\);//成功 else System.out.println(\false delfriend\);//失败 }catch (Exception e){e.printStackTrace();System.out.println(\del false\);} }//end delete friend //执行用户删除好友结束 //以下处理用户退出程序 else if(str.equals(\logout\)){ try{ Class.forName(\sun.jdbc.odbc.JdbcOdbcDriver\); Connection c8=DriverManager.getConnection(\jdbc:odbc:javaicq\,\ \,\ \); //连接数据库,根据接受的用户号码,将其状态字段设为0,及ip地址设为空 int myicqno=Integer.parseInt(in.readLine()); System.out.println(myicqno); String status=\update icq set status=0 , ip=' ' where icqno=?\; PreparedStatement prest8=c8.prepareCall(status); prest8.clearParameters(); prest8.setInt(1,myicqno); int r8=prest8.executeUpdate(); if(r8==1) System.out.println(\ok logout\); else System.out.println(\false logout\); }catch (Exception e){e.printStackTrace();System.out.println(\logout false\);} }//logout end //处理用户退出程序结束 //get who add me as friend //以下处理那些人加了我为好友,以便上线通知他们 else if(str.equals(\getwhoaddme\)){ System.out.println(\getwhoaddme\); try{ Class.forName(\sun.jdbc.odbc.JdbcOdbcDriver\); Connection c9=DriverManager.getConnection(\jdbc:odbc:javaicq\,\ \,\ \); //连接数据库,根据我的号码,从好友表中选择谁加了我 int myicqno=Integer.parseInt(in.readLine()); System.out.println(myicqno); String getwhoaddme=\select icqno from friend where friend=?\; PreparedStatement prepare6=c9.prepareCall(getwhoaddme); prepare6.clearParameters(); prepare6.setInt(1,myicqno); ResultSet r6=prepare6.executeQuery(); Vector who=new Vector(); while(r6.next()){ who.add(new Integer(r6.getInt(1))); }//end while //然后告诉这些好友的ip地址,然后发给用户以便告诉其他客户我上线了 for(int i=0;i<who.size();i++){ String whoinfo=\select ip from icq where icqno=? and status=1\; PreparedStatement prepare=c9.prepareCall(whoinfo); prepare.clearParameters(); prepare.setObject(1,who.get(i)); ResultSet r=prepare.executeQuery(); while(r.next()){ out.println(r.getString(\ip\)); } //while r.close(); }//for out.println(\over\); System.out.println(\over\); c9.close();r6.close(); }catch (Exception e){e.printStackTrace();System.out.println(\false\);} }//end get who add me as friend //处理上线结束 System.out.println(\Echo ing :\+str); } System.out.println(\Close...\); }catch(IOException e){}//捕或异常 finally {try{socket.close();} catch(IOException e){} } }} public class Server{//主服务器类 public static void main(String args[])throws IOException{ ServerSocket s=new ServerSocket(8080);//在8080端口创建套接口 System.out.println(\Server start..\+s); try{ while(true){Socket socket=s.accept();//无限监听客户的请求 System.out.println(\Connectino accept:\+socket); try{new ServerThread(socket);//创建新线程 }catch(IOException e){socket.close();} } }finally{s.close();}//捕或异常 } }//服务器程序结束

客户程序如下(部分)
客户通过Socket(InetAddress,port)建立与服务器的连接。服务器与客户都通过构造BufferedReader,PrintWriter来建立输入输出流,然后双方通过该输入输出流来相互传递信息,一旦收到客户方的连接请求,服务器accept()方法返回一个新建的Socket对象。客户端然后向服务器发送消息,比如注册,登录,查找好友等,服务器收到来自客户的请求后,针对不同的消息处理请求, 虽然UDP不可靠但是对于icq可靠性并不太重要,而且UDP快速,所以客户间发送信息通过UDP。用户登录时通过类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(); //}while(!str.equals(\ok\)); // socket.close(); }catch(IOException e1){} } }
用户登录。在客户端,信捷职称论文写作发表网,用户输入其jicq号码和密码,然后建立与服务器的连接,告诉服务器我要登录,服务器收到后,开始通过JdbcOdbc读取数据库,然后与用户输入的信息比较,如果相同就向客户返回成功消息并将其Status字段

核心期刊快速发表
Copyright@2000-2030 论文期刊网 Corporation All Rights Reserved.
《中华人民共和国信息产业部》备案号:ICP备07016076号;《公安部》备案号:33010402003207
本网站专业、正规提供职称论文发表和写作指导服务,并收录了海量免费论文和数百个经国家新闻出版总署审批过的具有国内统一CN刊号与国际标准ISSN刊号的合作期刊,供诸位正确选择和阅读参考,免费论文版权归原作者所有,谨防侵权。联系邮箱:256081@163.com