⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 基于java的icq系统的设计于实现.htm

📁 写给JSP初级程序员的书
💻 HTM
📖 第 1 页 / 共 4 页
字号:
      color=#333300>&nbsp;&nbsp;&nbsp;<BR>内容:&nbsp;<BR>&nbsp;<BR>一.序言&nbsp;<BR>二.设计&nbsp;<BR>三.程序界面&nbsp;<BR>四.程序的使用&nbsp;<BR>参考资料&nbsp;<BR>关于作者&nbsp;<BR>&nbsp;<BR>&nbsp;<BR>&nbsp;<BR>&nbsp;<BR>何刚&nbsp;(he_gum@chinaren.com)<BR>2001&nbsp;年&nbsp;10&nbsp;月<BR><BR>分析ICQ系统,并尝试用Java编写。<BR>一.序言&nbsp;<BR>ICQ是英文"I&nbsp;seek&nbsp;you&nbsp;"的简称,中文意思是我找你。ICQ最大的功能就是即时信息交流&nbsp;,只要记得对方的号码,上网时可以呼他,无论他在哪里,只要他上网打开ICQ,人们就&nbsp;可以随时交流。ICQ源于以色列特拉维夫的Mirabils公司。该公司成立于1996年7月,&nbsp;也就是在这个时候,互联网上最出名,下载使用人数最多的免费软件ICQ诞生了。可能是&nbsp;其不断增加的用户和广阔的前景以及广泛的应用前景和巨大的市场潜力,Mirabils的ICQ最&nbsp;终被美国在线AOL收购。由于ICQ的成功,推动了ICQ的本土化,就中文的ICQ而言,现在已经越来越多,比如著名的深圳腾迅公司推出的OICQ(现在由于版权问题,已改名为QQ2001),还有由TOM.COM推出的Tomq等,这些软件技术都很好,而且简单易用,成为&nbsp;中国网民最喜欢的通信软件。<BR><BR>但是这些公司都只提供软件的客户端程序免费下载,而不提供其服务器程序,因此对于未与互联网连接的私有网络,这些软件就用不上了。当然网上也有免费的类似ICQ的服务器提供下载,但是好多都不提供源程序,即使有,其说明也很简单,我很想知道它是怎么回事,所以我就试着做了。<BR><BR>二.设计<BR><BR>1.为什么选择JAVA?&nbsp;<BR>Java是Sun&nbsp;Microsystem公司的James&nbsp;Gosling开发的编程语言。它以C++为基础,但是却是一个全新的软件开发语言。Java是一个简单,面象对象,分布式,解释性,强壮,安全,与系统无关,可移植,高性能,多线程和动态的语言-------这是&nbsp;Sun给Java的定义。<BR><BR>Sun公司的口号就是"网络就是计算机",Java能使所有东西从桌面计算平稳的转变为基于网络的计算,它是专门为此而建立的,并显然是为了完成这个任务而来的。使用Java,我们可以相对轻松的一天编写一个有条理的网络程序。今天,Java的网络功能正在飞跃发展,不断有新的特性增加到这个有价值的基础上,JavaSoft实验室正在不断努力使Java更加完善。<BR><BR>2.数据库设计&nbsp;<BR>系统可以采用任何一种流行的,Java支持的数据库,本系统采用了Microsoft公司的SQL&nbsp;Server2000作为后台数据库。通过对现在流行的一些Icq的参考,建立数据库,名为javaicq,数据库共建立两个表,一个是用户的基本信息,包括呢称,Jicq号码等。一个是用户的好友表,包括用户自己的号码和好友的号码。<BR><BR>(1)用户的基本信息表(表名icq)&nbsp;序号&nbsp;字段名&nbsp;含义&nbsp;数据类型&nbsp;NULL&nbsp;<BR>1&nbsp;Icqno&nbsp;用户的号码&nbsp;Int&nbsp;No&nbsp;<BR>2&nbsp;Nickname&nbsp;用户的呢称&nbsp;Char&nbsp;No&nbsp;<BR>3&nbsp;Password&nbsp;用户的密码&nbsp;Char&nbsp;No&nbsp;<BR>4&nbsp;Status&nbsp;用户在线否&nbsp;Bit&nbsp;No&nbsp;<BR>5&nbsp;Ip&nbsp;用户的IP地址&nbsp;Char&nbsp;Yes&nbsp;<BR>6&nbsp;Info&nbsp;&nbsp;用户的资料&nbsp;Varchar&nbsp;Yes&nbsp;<BR>7&nbsp;Pic&nbsp;&nbsp;用户的头像号&nbsp;Int&nbsp;Yes&nbsp;<BR>8&nbsp;Sex&nbsp;用户性别&nbsp;Char&nbsp;Yes&nbsp;<BR>9&nbsp;Email&nbsp;用户的email&nbsp;Char&nbsp;Yes&nbsp;<BR>10&nbsp;Place&nbsp;用户的籍贯&nbsp;Char&nbsp;yes&nbsp;<BR>其中Icqno字段为自动增加。(其他还可以添加诸如电话号码等字段作为更多选择)<BR><BR>(2)用户的好友表(表名friend)&nbsp;序号&nbsp;字段名&nbsp;含义&nbsp;数据类型&nbsp;NULL&nbsp;&nbsp;<BR>1&nbsp;Icqno&nbsp;用户的号码&nbsp;Int&nbsp;No&nbsp;<BR>2&nbsp;Friend&nbsp;好友的号码&nbsp;Int&nbsp;&nbsp;No&nbsp;<BR><BR><BR>3.&nbsp;系统模式及程序(具体程序参看源程序)&nbsp;<BR>系统采用客户/服务器摸式(如图)<BR><BR>&nbsp;<BR><IMG 
      src="20061200110261055fig1.gif" width="533" height="466">&nbsp;<BR><BR>服务器程序:&nbsp;<BR>服务器与客户间通过套接口Socket(TCP)连接。在java中使用套接口相当简单,Java&nbsp;API为处理套接口的通信提供了一个类java.net.Socket.,使得编写网络应用程序相对容易.服务器采用多线程以满足多用户的请求,通过JDBC与后台数据库连接,并通过创建一个ServerSocket对象来监听来自客户的连接请求,默认端口为8080,然后无限循环调用accept()方法接受客户程序的连接<BR><BR>服务器程序代码如下:(部分)&nbsp;<BR>&nbsp;import&nbsp;java.io.*;<BR>&nbsp;import&nbsp;java.net.*;<BR>&nbsp;import&nbsp;java.sql.*;<BR>&nbsp;import&nbsp;java.util.Vector;<BR>&nbsp;class&nbsp;ServerThread&nbsp;extends&nbsp;Thread{//继承线程<BR>&nbsp;private&nbsp;Socket&nbsp;socket;//定义套接口<BR>&nbsp;private&nbsp;BufferedReader&nbsp;in;//定义输入流<BR>&nbsp;private&nbsp;PrintWriter&nbsp;out;//定义输出流<BR>&nbsp;int&nbsp;no;//定义申请的jicq号码<BR>&nbsp;public&nbsp;ServerThread(Socket&nbsp;s)&nbsp;throws&nbsp;IOException&nbsp;{//线程构造函数<BR>&nbsp;&nbsp;&nbsp;socket=s;//取得传递参数<BR>&nbsp;&nbsp;in=new&nbsp;BufferedReader(new&nbsp;InputStreamReader(socket.getInputStream()));//创建输入流<BR>&nbsp;&nbsp;out=new&nbsp;PrintWriter(new&nbsp;BufferedWriter(new&nbsp;&nbsp;&nbsp;&nbsp;OutputStreamWriter(socket.getOutputStream())),true);//创建输出流<BR>&nbsp;&nbsp;&nbsp;start();//启动线程<BR>&nbsp;&nbsp;&nbsp;}<BR><BR>&nbsp;public&nbsp;void&nbsp;run(){//线程监听函数<BR>&nbsp;try{&nbsp;while(true){<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;str=in.readLine();//取得输入字符串<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(str.equals("end"))break;//如果是结束就关闭连接<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;if(str.equals("login"))&nbsp;{//如果是登录<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try{&nbsp;Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");//连接数据库<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Connection&nbsp;c=DriverManager.getConnection("jdbc:odbc:javaicq","&nbsp;","&nbsp;");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;sql="select&nbsp;nickname,password&nbsp;from&nbsp;icq&nbsp;where&nbsp;icqno=?";<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//准备从数据库选择呢称和密码<BR>&nbsp;&nbsp;PreparedStatement&nbsp;prepare=c.prepareCall(sql);//设定数据库查寻条件<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;icqno=in.readLine();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;g=Integer.parseInt(icqno);//取得输入的jicq号码<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(icqno);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;passwd=in.readLine().trim();//取得输入的密码<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(passwd);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;prepare.clearParameters();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;prepare.setInt(1,g);//设定参数<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ResultSet&nbsp;r=prepare.executeQuery();//执行数据库查寻<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(r.next()){//以下比较输入的号码于密码是否相同<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;pass=r.getString("password").trim();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(pass);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(passwd.regionMatches(0,pass,0,pass.length()))<BR>{&nbsp;out.println("ok");<BR>//如果相同就告诉客户ok<BR>//并且更新数据库用户为在线<BR>//以及注册用户的ip&nbsp;地址<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//*************register&nbsp;ipaddress<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;setip="update&nbsp;icq&nbsp;set&nbsp;ip=?&nbsp;where&nbsp;icqno=?";<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PreparedStatement&nbsp;prest=c.prepareCall(setip);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;prest.clearParameters();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;prest.setString(1,socket.getInetAddress().getHostAddress());<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;prest.setInt(2,g);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;set=prest.executeUpdate();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(set);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//*************ipaddress<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//set&nbsp;status&nbsp;online<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;status="update&nbsp;icq&nbsp;set&nbsp;status=1&nbsp;where&nbsp;icqno=?";<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PreparedStatement&nbsp;prest2=c.prepareCall(status);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;prest2.clearParameters();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;prest2.setInt(1,g);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;set2=prest2.executeUpdate();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(set2);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//set&nbsp;online<BR>}<BR>//否者告诉客户失败<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;out.println("false");r.close();c.close();}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else{&nbsp;out.println("false");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("false");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r.close();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c.close();}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}catch&nbsp;(Exception&nbsp;e){e.printStackTrace();}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;socket.close();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}//end&nbsp;login<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//登录结束<BR>&nbsp;&nbsp;//以下为处理客户的新建请求<BR>else&nbsp;&nbsp;if(str.equals("new")){<BR>&nbsp;&nbsp;&nbsp;try{&nbsp;Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");//连接数据库<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Connection&nbsp;c2=DriverManager.getConnection("jdbc:odbc:javaicq","&nbsp;","&nbsp;");<BR>String&nbsp;newsql="insert&nbsp;into&nbsp;icq(nickname,password,email,info,place,pic)&nbsp;values(?,?,?,?,?,?)";<BR>//准备接受用户的呢称,密码,email,个人资料,籍贯,头像等信息<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PreparedStatement&nbsp;prepare2=c2.prepareCall(newsql);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;nickname=in.readLine().trim();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;password=in.readLine().trim();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;email=in.readLine().trim();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;info=in.readLine().trim();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;place=in.readLine().trim();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;picindex=Integer.parseInt(in.readLine());<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;prepare2.clearParameters();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;prepare2.setString(1,nickname);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;prepare2.setString(2,password);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;prepare2.setString(3,email);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;prepare2.setString(4,info);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;prepare2.setString(5,place);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;prepare2.setInt(6,picindex);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;r3=prepare2.executeUpdate();//执行数据库添加<BR>String&nbsp;sql2="select&nbsp;icqno&nbsp;from&nbsp;icq&nbsp;where&nbsp;nickname=?";<BR>//以下告诉客户其注册的号码<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PreparedStatement&nbsp;prepare3=c2.prepareCall(sql2);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;prepare3.clearParameters();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;prepare3.setString(1,nickname);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ResultSet&nbsp;r2=prepare3.executeQuery();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while(r2.next()){<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//out.println(r2.getInt(1));<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;no=r2.getInt(1);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(no);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.println(no);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.println("ok");<BR>c2.close();<BR>//完毕<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}catch&nbsp;(Exception&nbsp;e){e.printStackTrace();out.println("false");}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;socket.close();<BR>&nbsp;&nbsp;&nbsp;}//end&nbsp;new<BR>&nbsp;//新建用户结束<BR>&nbsp;//以下处理用户查找好友<BR>&nbsp;else&nbsp;if(str.equals("find")){<BR>&nbsp;try{&nbsp;Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Connection&nbsp;c3=DriverManager.getConnection("jdbc:odbc:javaicq","&nbsp;","&nbsp;");<BR>&nbsp;&nbsp;//以下连接数据库,并且返回其他用户的呢称,性别,籍贯,个人资料等信息<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;find="select&nbsp;nickname,sex,place,ip,email,info&nbsp;from&nbsp;icq";<BR>&nbsp;&nbsp;&nbsp;&nbsp;Statement&nbsp;st=c3.createStatement();<BR>&nbsp;&nbsp;&nbsp;&nbsp;ResultSet&nbsp;result=st.executeQuery(find);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while(result.next()){<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.println(result.getString("nickname"));<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.println(result.getString("sex"));<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.println(result.getString("place"));<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.println(result.getString("ip"));<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.println(result.getString("email"));<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.println(result.getString("info"));<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}//while&nbsp;end<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.println("over");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;////////GET&nbsp;ICQNO<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;d,x;<BR>boolean&nbsp;y;<BR>//以下返回用户的jicq号码,头像号,及是否在线<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ResultSet&nbsp;iset=st.executeQuery("select&nbsp;icqno,pic,status&nbsp;from&nbsp;icq");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while(iset.next()){<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;d=iset.getInt("icqno");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.println(d);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x=iset.getInt("pic");//pic&nbsp;info<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.println(x);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;y=iset.getBoolean("status");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(y){out.println("1");}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;{out.println("0");}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//System.out.println(d);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;end&nbsp;send&nbsp;jicqno<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iset.close();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/////////icqno&nbsp;end<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c3.close();result.close();<BR>&nbsp;}catch&nbsp;(Exception&nbsp;e){e.printStackTrace();System.out.println("false");}<BR>&nbsp;//socket.close();<BR>&nbsp;}//end&nbsp;find<BR>&nbsp;//查找好友结束<BR>&nbsp;//以下处理用户登录时读取其好友资料<BR>&nbsp;else&nbsp;if(str.equals("friend")){<BR>&nbsp;try{&nbsp;Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Connection&nbsp;c4=DriverManager.getConnection("jdbc:odbc:javaicq","&nbsp;","&nbsp;");<BR>&nbsp;//以下连接好友表,返回用户的好友名单<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;friend="select&nbsp;friend&nbsp;from&nbsp;friend&nbsp;where&nbsp;icqno=?";<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PreparedStatement&nbsp;prepare4=c4.prepareCall(friend);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;prepare4.clearParameters();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;icqno=Integer.parseInt(in.readLine());<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(icqno);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;prepare4.setInt(1,icqno);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ResultSet&nbsp;r4=prepare4.executeQuery();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Vector&nbsp;friendno=new&nbsp;Vector();//该矢量保存好友号码<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while(r4.next()){<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;friendno.add(new&nbsp;Integer(r4.getInt(1)));<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;//read&nbsp;friend&nbsp;info<BR>&nbsp;//以下告诉客户其好友的呢称,号码,ip地址,状态,头像,个人资料等信息<BR>&nbsp;&nbsp;&nbsp;&nbsp;out.println(friendno.size());<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(int&nbsp;i=0;i&lt;friendno.size();i++){<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;friendinfo="select&nbsp;nickname,icqno,ip,status,pic,email,info&nbsp;from&nbsp;icq&nbsp;where&nbsp;&nbsp;icqno=?";<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PreparedStatement&nbsp;prepare5=c4.prepareCall(friendinfo);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;prepare5.clearParameters();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;prepare5.setObject(1,friendno.get(i));<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ResultSet&nbsp;r5=prepare5.executeQuery();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;boolean&nbsp;status;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while(r5.next()){<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.println(r5.getString("nickname"));<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.println(r5.getInt("icqno"));<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.println(r5.getString("ip"));<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;status=r5.getBoolean("status");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(status)out.println("1");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;{out.println("0");}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.println(r5.getInt("pic"));<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.println(r5.getString("email"));<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.println(r5.getString("info"));<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;//while<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r5.close();<BR>}//for<BR>//发送完毕<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.println("over");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("over");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c4.close();r4.close();<BR>&nbsp;}catch&nbsp;(Exception&nbsp;e){e.printStackTrace();System.out.println("false");}<BR>&nbsp;//socket.close();<BR>&nbsp;}//end&nbsp;friend<BR>&nbsp;//读取好友信息完毕<BR>&nbsp;//以下处理用户添加好友<BR>&nbsp;else&nbsp;if(str.equals("addfriend")){<BR>&nbsp;System.out.println("add");<BR>&nbsp;try{&nbsp;Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Connection&nbsp;c6=DriverManager.getConnection("jdbc:odbc:javaicq","&nbsp;","&nbsp;");<BR>&nbsp;//连接数据库,根据接受的用户号码及好友号码向好友表添加记录<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;friendicqno=Integer.parseInt(in.readLine());<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(friendicqno);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;myicqno=Integer.parseInt(in.readLine());<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(myicqno);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;addfriend="insert&nbsp;into&nbsp;friend&nbsp;values(?,?)";<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PreparedStatement&nbsp;prepare6=c6.prepareCall(addfriend);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;prepare6.clearParameters();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;prepare6.setInt(1,myicqno);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;prepare6.setInt(2,friendicqno);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;&nbsp;r6=0;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r6=prepare6.executeUpdate();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(r6==1)&nbsp;System.out.println("ok&nbsp;&nbsp;addfrien");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;&nbsp;System.out.println("false&nbsp;addfriend");<BR><BR>&nbsp;&nbsp;&nbsp;}catch&nbsp;(Exception&nbsp;e){e.printStackTrace();System.out.println("false");}<BR><BR>&nbsp;&nbsp;//socket.close();<BR>&nbsp;&nbsp;System.out.println("over&nbsp;addfriend");<BR>&nbsp;&nbsp;}//end&nbsp;addfriend<BR>&nbsp;&nbsp;//用户添加好友结束<BR>&nbsp;&nbsp;//add&nbsp;new&nbsp;friend&nbsp;who&nbsp;add&nbsp;me<BR>&nbsp;&nbsp;//以下处理其他用户如果加我,我就加他<BR>&nbsp;&nbsp;else&nbsp;if(str.equals("addnewfriend")){<BR>&nbsp;&nbsp;System.out.println("add");<BR>&nbsp;&nbsp;&nbsp;&nbsp;try{&nbsp;Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Connection&nbsp;c6=DriverManager.getConnection("jdbc:odbc:javaicq","&nbsp;","&nbsp;");<BR>&nbsp;&nbsp;&nbsp;&nbsp;//连接数据库,根据接受的用户号码及好友号码向好友表添加记录<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;friendicqno=Integer.parseInt(in.readLine());<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(friendicqno);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;myicqno=Integer.parseInt(in.readLine());<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(myicqno);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;addfriend="insert&nbsp;into&nbsp;friend&nbsp;values(?,?)";<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PreparedStatement&nbsp;prepare6=c6.prepareCall(addfriend);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;prepare6.clearParameters();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;prepare6.setInt(1,myicqno);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;prepare6.setInt(2,friendicqno);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;&nbsp;r6=0;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r6=prepare6.executeUpdate();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(r6==1)&nbsp;System.out.println("ok&nbsp;&nbsp;addfrien");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;&nbsp;System.out.println("false&nbsp;addfriend");<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;friendinfo="select&nbsp;nickname,icqno,ip,status,pic,email,info&nbsp;from&nbsp;icq&nbsp;where&nbsp;icqno=?";<BR>&nbsp;&nbsp;&nbsp;//如果成功,就向用户传递好友的基本信息,比如呢称等<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PreparedStatement&nbsp;prepare5=c6.prepareCall(friendinfo);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;prepare5.clearParameters();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;prepare5.setInt(1,friendicqno);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ResultSet&nbsp;r5=prepare5.executeQuery();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;boolean&nbsp;status;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while(r5.next()){<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("dsf");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.println(r5.getString("nickname"));<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.println(r5.getInt("icqno"));<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.println(r5.getString("ip"));<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;status=r5.getBoolean("status");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(status)out.println("1");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;{out.println("0");}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.println(r5.getInt("pic"));<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.println(r5.getString("email"));<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.println(r5.getString("info"));<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;//while<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.println("over");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r5.close();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c6.close();<BR>&nbsp;&nbsp;&nbsp;&nbsp;}catch&nbsp;(Exception&nbsp;e){e.printStackTrace();System.out.println("false");}<BR>&nbsp;&nbsp;System.out.println("over&nbsp;addnewfriend");<BR>&nbsp;&nbsp;&nbsp;}//end&nbsp;addfriend<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//结束处理其他用户如果加我,我就加他<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//delete&nbsp;friend<BR>&nbsp;&nbsp;//以下执行用户删除好友<BR>&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;if(str.equals("delfriend")){<BR>&nbsp;System.out.println("del");<BR>&nbsp;try{&nbsp;Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Connection&nbsp;c7=DriverManager.getConnection("jdbc:odbc:javaicq","&nbsp;","&nbsp;");<BR>&nbsp;&nbsp;&nbsp;//连接数据库,根据接受的用户号码及好友号码向好友表删除记录<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;friendicqno=Integer.parseInt(in.readLine());<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(friendicqno);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;myicqno=Integer.parseInt(in.readLine());<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(myicqno);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;addfriend="delete&nbsp;from&nbsp;friend&nbsp;where&nbsp;icqno=?&nbsp;and&nbsp;friend=?";<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PreparedStatement&nbsp;prepare7=c7.prepareCall(addfriend);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;prepare7.clearParameters();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;prepare7.setInt(1,myicqno);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;prepare7.setInt(2,friendicqno);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;&nbsp;r7=0;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r7=prepare7.executeUpdate();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(r7==1)&nbsp;System.out.println("ok&nbsp;&nbsp;delfrien");//成功<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;&nbsp;System.out.println("false&nbsp;delfriend");//失败<BR>&nbsp;&nbsp;&nbsp;}catch&nbsp;(Exception&nbsp;e){e.printStackTrace();System.out.println("del&nbsp;false");}<BR>&nbsp;&nbsp;&nbsp;}//end&nbsp;delete&nbsp;friend<BR>&nbsp;&nbsp;&nbsp;//执行用户删除好友结束<BR>&nbsp;&nbsp;//以下处理用户退出程序<BR>&nbsp;&nbsp;else&nbsp;if(str.equals("logout")){<BR>&nbsp;&nbsp;try{&nbsp;Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Connection&nbsp;c8=DriverManager.getConnection("jdbc:odbc:javaicq","&nbsp;","&nbsp;");<BR>&nbsp;&nbsp;//连接数据库,根据接受的用户号码,将其状态字段设为0,及ip地址设为空<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;myicqno=Integer.parseInt(in.readLine());<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(myicqno);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;status="update&nbsp;icq&nbsp;set&nbsp;status=0&nbsp;,&nbsp;ip='&nbsp;'&nbsp;where&nbsp;icqno=?";<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PreparedStatement&nbsp;prest8=c8.prepareCall(status);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;prest8.clearParameters();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;prest8.setInt(1,myicqno);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;r8=prest8.executeUpdate();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(r8==1)&nbsp;System.out.println("ok&nbsp;&nbsp;logout");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;&nbsp;System.out.println("false&nbsp;logout");<BR>&nbsp;&nbsp;}catch&nbsp;(Exception&nbsp;e){e.printStackTrace();System.out.println("logout&nbsp;false");}<BR>&nbsp;&nbsp;}//logout&nbsp;end<BR>&nbsp;&nbsp;//处理用户退出程序结束<BR>&nbsp;&nbsp;//get&nbsp;who&nbsp;add&nbsp;me&nbsp;as&nbsp;friend<BR>&nbsp;&nbsp;//以下处理那些人加了我为好友,以便上线通知他们<BR>&nbsp;&nbsp;else&nbsp;if(str.equals("getwhoaddme")){<BR>&nbsp;&nbsp;System.out.println("getwhoaddme");<BR>&nbsp;&nbsp;&nbsp;try{&nbsp;Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Connection&nbsp;c9=DriverManager.getConnection("jdbc:odbc:javaicq","&nbsp;","&nbsp;");<BR>&nbsp;&nbsp;&nbsp;//连接数据库,根据我的号码,从好友表中选择谁加了我<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;myicqno=Integer.parseInt(in.readLine());<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(myicqno);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;getwhoaddme="select&nbsp;icqno&nbsp;from&nbsp;friend&nbsp;where&nbsp;friend=?";<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PreparedStatement&nbsp;prepare6=c9.prepareCall(getwhoaddme);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;prepare6.clearParameters();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;prepare6.setInt(1,myicqno);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ResultSet&nbsp;r6=prepare6.executeQuery();<BR>&nbsp;&nbsp;&nbsp;&nbsp;Vector&nbsp;who=new&nbsp;Vector();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while(r6.next()){<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;who.add(new&nbsp;Integer(r6.getInt(1)));<BR>&nbsp;&nbsp;&nbsp;}//end&nbsp;while<BR>&nbsp;//然后告诉这些好友的ip地址,然后发给用户以便告诉其他客户我上线了<BR>&nbsp;&nbsp;&nbsp;&nbsp;for(int&nbsp;i=0;i&lt;who.size();i++){<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;whoinfo="select&nbsp;ip&nbsp;from&nbsp;icq&nbsp;where&nbsp;icqno=?&nbsp;and&nbsp;status=1";<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PreparedStatement&nbsp;prepare=c9.prepareCall(whoinfo);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;prepare.clearParameters();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;prepare.setObject(1,who.get(i));<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ResultSet&nbsp;r=prepare.executeQuery();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while(r.next()){<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.println(r.getString("ip"));<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;//while<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r.close();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}//for<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.println("over");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("over");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c9.close();r6.close();<BR>&nbsp;&nbsp;}catch&nbsp;(Exception&nbsp;e){e.printStackTrace();System.out.println("false");}<BR>&nbsp;&nbsp;}//end&nbsp;get&nbsp;who&nbsp;add&nbsp;me&nbsp;as&nbsp;friend<BR>&nbsp;//处理上线结束<BR>&nbsp;&nbsp;&nbsp;System.out.println("Echo&nbsp;ing&nbsp;:"+str);<BR>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;System.out.println("Close...");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}catch(IOException&nbsp;e){}//捕或异常<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;finally&nbsp;{try{socket.close();}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;catch(IOException&nbsp;e){}<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;}<BR>}<BR>&nbsp;&nbsp;public&nbsp;class&nbsp;Server{//主服务器类<BR>&nbsp;&nbsp;public&nbsp;static&nbsp;void&nbsp;main(String&nbsp;args[])throws&nbsp;IOException{<BR>&nbsp;&nbsp;ServerSocket&nbsp;s=new&nbsp;ServerSocket(8080);//在8080端口创建套接口<BR>&nbsp;System.out.println("Server&nbsp;start.."+s);<BR>&nbsp;&nbsp;try{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while(true){Socket&nbsp;socket=s.accept();//无限监听客户的请求<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("Connectino&nbsp;accept:"+socket);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try{new&nbsp;ServerThread(socket);//创建新线程<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}catch(IOException&nbsp;e){socket.close();}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}finally{s.close();}//捕或异常<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;}//服务器程序结束<BR>&nbsp;<BR><BR><BR>客户程序如下(部分)&nbsp;<BR>客户通过Socket(InetAddress,port)建立与服务器的连接。服务器与客户都通过构造BufferedReader,PrintWriter来建立输入输出流,然后双方通过该输入输出流来相互传递信息,一旦收到客户方的连接请求,服务器accept()方法返回一个新建的Socket对象。客户端然后向服务器发送消息,比如注册,登录,查找好友等,服务器收到来自客户的请求后,针对不同的消息处理请求,&nbsp;虽然UDP不可靠但是对于icq可靠性并不太重要,而且UDP快速,所以客户间发送信息通过UDP。用户登录时通过类DatagramPacket和DatagramSocket创建UDP包括其本地接受端口以及发送端口,默认端口为5000和5001,通过取得的好友的IP地址来向好友发送消息(send(DatagramPacket)和接受消息(receive(DatagramPacket))。当用户通过UDP收到消息后,可以通过DatagramPacket的方法InetAddress&nbsp;getAddress()得到对方的ip地址,通过对好友列表比较以判断是谁并提示用户收到某某的消息,然后用户选择该用户查看消息,如果好友列表没有该人就显示收到陌生人的消息。用户可以按陌生人按钮查看消息。<BR><BR>用户注册。当服务器收到用户的注册请求,便开始接受客户传第的信息,诸如客户的呢称啦,性别,籍贯,头像,个人资料等,接受完毕后,便通过JdbcOdbc与后台数据库连接,然后向数据库添加记录,如果成功,便向客户返回其Jicq号码,并在数据库中注册用户的IP地址,然后更新其Status为1即用户在线。客户收到服务器返回的信息后,便打开主程序窗口,并同时开始创建UDP以便在用户之间建立联系。&nbsp;<BR>******部分程序如下:&nbsp;<BR>&nbsp;&nbsp;void&nbsp;jButton1_mouseClicked(MouseEvent&nbsp;e)&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;try{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Socket&nbsp;socket=new&nbsp;Socket(InetAddress.getByName(sername),serverport);//连接服务器<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BufferedReader&nbsp;in=new&nbsp;BufferedReader(new&nbsp;InputStreamReader(socket.getInputStream()));<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PrintWriter&nbsp;out=new&nbsp;PrintWriter(new&nbsp;BufferedWriter(<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;new&nbsp;OutputStreamWriter(socket.getOutputStream())),true);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.println("new");//告诉服务器我要注册<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.println(nickname.getText().trim());//告诉服务器我的呢称,密码,email,资料<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.println(password.getPassword());//以及头像号等信息<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.println(email.getText().trim());<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.println(info.getText().trim());<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.println(place.getSelectedItem());<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.println(headpic.getSelectedIndex());//head&nbsp;picindex<BR>&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;no;<BR>&nbsp;&nbsp;&nbsp;&nbsp;no=Integer.parseInt(in.readLine());<BR>&nbsp;&nbsp;&nbsp;&nbsp;//System.out.print(no);<BR><BR>&nbsp;&nbsp;&nbsp;String&nbsp;str="&nbsp;";<BR>&nbsp;&nbsp;&nbsp;str=in.readLine().trim();//从服务器取得状态<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(str.equals("false"))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JOptionPane.showMessageDialog(this,"对不起,出错了:-&nbsp;(","ok",JOptionPane.INFORMATION_MESSAGE);//失败就警告<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else{//成功就打开主程序<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JOptionPane.showMessageDialog(this,"your&nbsp;javaicq#is"+no,"ok",JOptionPane.INFORMATION_MESSAGE);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.dispose();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MainWin&nbsp;f2=new&nbsp;MainWin(no,sername,serverport);<BR>&nbsp;&nbsp;&nbsp;&nbsp;f2.setVisible(true);}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//System.out.println("\n");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//}while(!str.equals("ok"));<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;socket.close();<BR>&nbsp;&nbsp;&nbsp;&nbsp;}catch(IOException&nbsp;e1){}<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;}<BR>&nbsp;<BR><IMG 
      src="31044200110261055fig2.gif" width="514" height="556">&nbsp;&nbsp;<BR><BR>用户登录。在客户端,用户输入其jicq号码和密码,然后建立与服务器的连接,告诉服务器我要登录,服务器收到后,开始通过JdbcOdbc读取数据库,然后与用户输入的信息比较,如果相同就向客户返回成功消息并将其Status字段设为1表示上线了以及注册其IP地址,否则返回错误,如果客户收到成功信息就打开主窗口,否则提示出错。如果成功,便打开主程序窗口,并同时开始创建UDP以便在用户之间建立联系。然后客户向服务器请求读取好友名单,服务器收到该请求,开始读取数据库中的friend表,得到好友的号码后,再在icq表中读取好友资料,然后向客户端发送这些信息,客户收到后就在主窗口显示好友,比如头像,呢称。并且建立几个矢量(Vector)用以存储好友的呢称,jicq号码,头像编号,ip地址等信息。&nbsp;<BR>部分程序如下:(程序流程图与注册差不多,略)<BR>void&nbsp;login_mouseClicked(MouseEvent&nbsp;e)&nbsp;{<BR>&nbsp;&nbsp;try{Socket&nbsp;socket=new&nbsp;Socket(InetAddress.getByName(server),serport);//与服务器连接<BR>&nbsp;&nbsp;&nbsp;BufferedReader&nbsp;in=new&nbsp;BufferedReader(new&nbsp;InputStreamReader(socket.getInputStream()));//创建//输入流<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PrintWriter&nbsp;out=new&nbsp;PrintWriter(new&nbsp;BufferedWriter(<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;new&nbsp;OutputStreamWriter(socket.getOutputStream())),true);&nbsp;//创建输出流<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.println("login");//告诉服务器我要登录<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.println(jicq.getText());&nbsp;//告诉服务器我的号码<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.println(password.getPassword());&nbsp;//告诉服务器我的密码<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;str="&nbsp;";<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//do{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;str=in.readLine().trim();//取得服务器发过来的消息<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(str.equals("false"))<BR>JOptionPane.showMessageDialog(this,"对不起,出错了:-(","ok",JOptionPane.INFORMATION_MESSAGE);//失败<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.dispose();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;g=Integer.parseInt(jicq.getText());<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MainWin&nbsp;f2=new&nbsp;MainWin(g,server,serport);//如果成功就打开主程序<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;f2.setVisible(true);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//System.out.println("\n");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//}while(!str.equals("ok"));<BR>&nbsp;&nbsp;&nbsp;&nbsp;}catch(IOException&nbsp;e1){}<BR>&nbsp;&nbsp;}<BR>&nbsp;<BR><BR><BR>用户添加好友。客户登录后,按查找按钮后,开始向服务器发出查找请求,服务器读取数据库表icq并向客户返回其结果,客户收到后在查找窗口中显示,如果用户选择了一个好友,就向服务器发送添加好友请求,服务器收到后就向数据库表friend中添加自己的号码以及好友的号码,并从icq表中读取其基本信息返回给客户端,然后客户收到并在主窗口显示该好友。并且通过UDP通知该客户,对方收到该消息后,可以选择添加该用户为好友或者不。(程序流程图与程序略,参看源程序)&nbsp;<BR>用户删除好友。用户在其好友列表中选择要删除的好友并按删除,然后向服务器发送删除请求,服务器收到该请求后,连接数据库表friend删除用户及该好友的记录,如果成功就向客户返回成功消息,客户收到后在其好友列表中删除该好友。(程序流程图与程序略,参看源程序)&nbsp;<BR>用户发送和接收消息.用户通过在好友列表里的好友的ip地址,通过UDP与其他用户进行信息交流,&nbsp;(程序流程图与程序略,参看源程序src.zip)<BR>三.程序界面&nbsp;<BR>程序界面主要参考腾迅公司的QQ2000,在实现时采用的Java的Swing图形包。开发工具用的是Borland公司的Jbuilder4。<BR><BR>四.程序的使用&nbsp;<BR>源程序参见&nbsp;src.zip.<BR><BR>服务器端:(Windows平台)首先应有java环境jdk,建议采用jdk1.3。然后应有一个数据库系统,建立数据库javaicq,并且建立表icq和表friend。然后在控制面板中的ODBC数据源中设置数据源javaicq建立与数据库的连接。然后运行javac&nbsp;Server.java&nbsp;,java&nbsp;Server及可。&nbsp;<BR>客户端:只要有有java环境jdk就可以建议jdk1.3。然后运行javac&nbsp;New.java&nbsp;,java&nbsp;New及可。<BR>五.参考资料:&nbsp;<BR><BR>Java2图形设计 卷二:Swing&nbsp;(美)&nbsp;David&nbsp;M.Geary&nbsp;<BR>Java2&nbsp;编程思想 (美) Bruce&nbsp;Eckel&nbsp;<BR>UNIX网络编程(第一卷)(美) W.Richard&nbsp;Stevens&nbsp;<BR><BR>另外,该程序在端口上选取的是固定的一个端口,所以在同一机器只能运行一次,如果单机调试可以修改客户程序的udp端口(我的5000目录是个例子,将int&nbsp;udpPORT=5001,int&nbsp;sendPort=5000改为int&nbsp;udpPORT=5000,int&nbsp;sendPort=5001)&nbsp;<BR><BR>关于作者&nbsp;<BR>何刚,毕业与于重庆三峡学院计算机系,现在在德阳一个公司工作。我很喜欢java,只是现在没有用它了。我的javaicq也是我的毕业设计,当时考虑的不全面,程序和oicq还有很大差别,比如头像不会闪动呀,不过还是有点像,我将源程序全部提供,希望大家帮助我完善,谢谢!Email:&nbsp;he_gum@chinaren.com&nbsp;&nbsp;<BR>&nbsp;&nbsp; 
      </FONT></TD></TR>
  <TR>
    <TD height=5>
      <HR align=center color=#cccccc noShade SIZE=1>
    </TD></TR></TBODY></BODY></HTML>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -