镜像博客
后台登陆
返回首页
经典文章 程序参考 电路收藏 开发工具 电子导航
 快速通道
-------------------------------------
 
 
 
 
 免费电话
-------------------------------------------------------------------------------------------------------------------------------------------------------------

校园梦网网络电话,中国最优秀的网络电话

 
 友情连接
-------------------------------------
 
 
 最新主题
-------------------------------------------------------------------------------------------------------------------------------------------------------------

类似QQ程序的源码原理  2008-5-26 9:31:00 --- 免费电话想打就打

 

类似QQ程序的源码原理

类似QQ程序的源码原理! 1 X. V+ ~2 ?% `) W9 I. G0 Z
--------------------------------------------------------------------------------
& ~4 d% W' N$ R( L- @2 H# h5 c代码:(1)用户的基本信息表(表名icq)
. H. S- V3 E* j序号 字段名 含义 数据类型 NULL * {' W1 p8 F. t) @4 f  g1 l
1 Icqno 用户的号码 Int No
+ f5 T/ ^+ H$ `, N( }2 Nickname 用户的呢称 Char No 9 d. E& ]. O2 h* @0 D  I9 x
3 Password 用户的密码 Char No
. Z- v. N9 p+ ]! F  N$ o% j, ?4 Status 用户在线否 Bit No
( F$ F0 R8 u. s8 x. `5 Ip 用户的IP地址 Char Yes
& s- }# W0 \& y$ m6 Info 用户的资料 Varchar Yes / w2 ?# ^) E  L( b+ J7 I; a
7 Pic 用户的头像号 Int Yes % p6 s: E5 Q/ m' I6 r. D
8 Sex 用户性别 Char Yes $ r& x2 J* n+ A: r' p
9 Email 用户的email Char Yes
+ N: I, o: O/ I+ x. p. ~% _10 Place 用户的籍贯 Char yes 6 E3 X0 B7 h0 K8 t' s
其中Icqno字段为自动增加。(其他还可以添加诸如电话号码等字段作为更多选择) 8 P$ F3 v1 E0 t9 ]
(2)用户的好友表(表名friend) " l7 H1 i8 v% J  K/ \
序号 字段名 含义 数据类型 NULL
# i6 Y' e" L. F; s; A1 Icqno 用户的号码 Int No
+ \' x0 F3 x- X8 R2 e2 Friend 好友的号码 Int No   _! p& A& o. }) K% @) B; ^
1. 服务器程序: ( S, R3 h4 n/ b& ^$ N' F7 Y
服务器与客户间通过套接口Socket(TCP)连接。
) G5 T$ G2 n' D  K0 `在java中使用套接口相当简单,Java API为处理套接口的通信提供了一个类java.net.Socket. ) j: t1 s9 a( E
,使得编写网络应用程序相对容易.服务器采用多线程以满足多用户的请求,通过JDBC与后台数据库连接, 9 o8 n3 D! `  j: M+ [* x
并通过创建一个ServerSocket对象来监听来自客户的连接请求,默认端口为8080, % e8 M+ g& L3 H, Y
然后无限循环调用accept()方法接受客户程序的连接 1 C) }, q/ W% E( Q
服务器程序代码如下:(部分) ! z" J4 T  `/ k! W& q0 Q, `
import java.io.*; 3 @5 }: c& e$ F
import java.net.*;
0 k2 x) V( A" A0 wimport java.sql.*;
9 |# X& Z( y$ h3 Timport java.util.Vector;
, q6 N, o- X/ X0 Z& Qclass ServerThread extends Thread{//继承线程
! W2 p% ~3 D8 ?$ m* |# Xprivate Socket socket;//定义套接口 " z' |4 L# h, c+ E2 x, |; r' G
private BufferedReader in;//定义输入流 ) \7 b% r! w- X& R
private PrintWriter out;//定义输出流
, H& k9 K- ~: \4 g- lint no;//定义申请的jicq号码 7 J3 s( x. x6 k
public ServerThread(Socket s) throws IOException {//线程构造函数
) k4 b$ |* C/ q4 n8 [& usocket=s;//取得传递参数
) W/ f9 [0 M$ Q; {  r, r( }$ ]in=new BufferedReader(new InputStreamReader(socket.getInputStream()));//创建输入流 , n8 `( W7 v( ^# S- H! y
out=new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true);//创建输出流 start();//启动线程 0 f! O# t% v$ k$ O+ }6 G' r& F% v7 k
}
. L( L. ?2 v8 `public void run(){//线程监听函数
; U0 }. s6 G# x) Y! B1 ^+ mtry{
+ Q/ X/ o8 B5 k' ^/ \" {; w) _while(true) : V  h: R, C4 t' S' S
{ String str=in.readLine();//取得输入字符串 0 {, T8 g# `% m. z9 c& R
if(str.equals("end")) break;//如果是结束就关闭连接
. ]. m# c9 `' F' q3 g# J3 [& M( zelse if(str.equals("login"))
' U+ r& B) n0 R) [9 v% c{//如果是登录 3 d8 O3 [2 i: B, q" @: E  k9 p
try{ : B* q; s& i2 Q* Q3 e2 o; L
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");//连接数据库
0 H; ]( @/ Y: d- U  ]# T: }Connection c=DriverManager.getConnection("jdbc:odbc:javaicq"," "," ");
9 Z! t; W* g( G" q) \String sql="select nickname,password from icq where icqno=?"; //准备从数据库选择呢称和密码 PreparedStatement prepare=c.prepareCall(sql);//设定数据库查寻条件
" f) C7 [! s0 L) X  n& GString icqno=in.readLine();
( y9 R* o6 J" M( y) e2 d% S- sint g=Integer.parseInt(icqno);//取得输入的jicq号码
# H! S9 z$ @( V+ f/ y! Z6 p9 g% Z/ uSystem.out.println(icqno); & k! X, x/ M& B# X  P
String passwd=in.readLine().trim();//取得输入的密码
3 @+ d/ x, G1 zSystem.out.println(passwd); * g8 e6 [! r$ k# I% }4 P+ E
prepare.clearParameters(); - ?/ [* z2 y  k
prepare.setInt(1,g);//设定参数
4 _& `7 k! j4 I3 ]) {# cResultSet r=prepare.executeQuery();//执行数据库查寻
0 C! @1 V% V3 hif(r.next())
5 O! O/ Y+ h5 t) ^* ]3 ?{//以下比较输入的号码于密码是否相同 3 u( f7 {* e5 U6 s/ n$ r: J
String pass=r.getString("password").trim(); 9 l5 V1 o5 F! Z; f1 M
System.out.println(pass); * g' \( O/ x0 r0 a9 K0 `" t8 y$ M, V
if(passwd.regionMatches(0,pass,0,pass.length())){ 1 t2 T9 I( u5 e/ ^2 V
out.println("ok"); - s# G' Z. U, ]) H* [5 K/ M
//如果相同就告诉客户ok//并且更新数据库用户为在线
' O* `6 x' B! T/ S//以及注册用户的ip 地址 //*************register ipaddress # X7 R3 t. @# R9 t# I2 _- ?- E
String setip="update icq set ip=? where icqno=?"; 5 C( `9 D3 E4 ]7 X' t
PreparedStatement prest=c.prepareCall(setip);
4 E2 v' e' e1 Q0 ]  r# B  }prest.clearParameters(); # I6 L# b3 i7 }' i7 u! O
prest.setString(1,socket.getInetAddress().getHostAddress()); , z8 i! c, K( t) l- X
prest.setInt(2,g); int set=prest.executeUpdate(); 3 c/ b, Y1 ~5 ~3 \# d; p
System.out.println(set); //*************ipaddress //set status online
' H; r) J% f$ C0 {8 LString status="update icq set status=1 where icqno=?"; 9 S8 f2 Y3 Q) H
PreparedStatement prest2=c.prepareCall(status);
- ?1 }) p, A4 O8 B9 G) ?) Nprest2.clearParameters(); # u7 z- c3 ~6 Q! o
prest2.setInt(1,g);
8 `) |9 {; \* F' aint set2=prest2.executeUpdate(); 9 q+ `7 h8 ?: y9 [/ {
System.out.println(set2); //set online
' `8 i9 y$ D8 w7 D}//否者告诉客户失败 ( s8 L9 i/ |  A! P# D
else out.println("false");r.close();c.close();} , ^, {. H4 o: o8 ^1 P  U
else{ out.println("false"); ( ~6 B. H* c- }% E+ y
System.out.println("false"); r.close(); c.close();} }
5 o! Z+ q  j! ^: }catch (Exception e){e.printStackTrace();}
! s' w1 w/ G1 n2 f/ Lsocket.close(); }//end login //登录结束 //以下为处理客户的新建请求   O4 D7 B2 K: V* R1 L  C8 Y
else if(str.equals("new")){ ! q* i" Z: S; Y
try{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
: f' n: ^/ n! [2 f$ c//连接数据库
& Y1 h% i/ O! eConnection c2=DriverManager.getConnection("jdbc:odbc:javaicq"," "," ");
2 c$ r- k4 u" gString newsql="insert into icq(nickname,password,email,info,place,pic) values(?,?,?,?,?,?)";
2 w- K. ~  G- D2 K9 H' H' o7 A$ ^$ o//准备接受用户的呢称,密码,email,个人资料,籍贯,头像等信息 & z! P  L, [! }. H1 ~; s- p
PreparedStatement prepare2=c2.prepareCall(newsql); 7 u2 P7 ?4 D% Y; p* G7 P: t" O
String nickname=in.readLine().trim();
! l, }1 E0 t4 V% W1 F2 K/ @, rString password=in.readLine().trim(); / b; d1 d7 g( O$ X* q7 X8 w* y( Q
String email=in.readLine().trim();
- R9 l" m, M0 r0 M8 jString info=in.readLine().trim(); 3 B2 D# n4 @# {4 p
String place=in.readLine().trim(); : o! t: C/ n1 I1 z4 T4 l
int picindex=Integer.parseInt(in.readLine()); ) s6 L% x0 c8 |2 Q8 a
prepare2.clearParameters(); ) W/ f9 @9 Y# E
prepare2.setString(1,nickname); - `) Y" W# r9 ^; H
prepare2.setString(2,password);
7 \( F0 G8 E) o8 `' jprepare2.setString(3,email);
8 P; Q4 V+ |" ]& i/ a1 P! l" d3 Hprepare2.setString(4,info); + M2 n6 [: w. H- G
prepare2.setString(5,place); 5 ~9 w4 y) X/ O$ ^
prepare2.setInt(6,picindex); 8 ]# b- H6 z- ]: t
int r3=prepare2.executeUpdate();//执行数据库添加
% ]4 f: t+ ~1 b- ]: K! N8 ?String sql2="select icqno from icq where nickname=?";//以下告诉客户其注册的号码 5 L3 q2 l1 o( K1 F6 i
PreparedStatement prepare3=c2.prepareCall(sql2); ! W1 d# v- ]7 R" l( D
prepare3.clearParameters(); 3 R# B1 v' f( C  z3 V. e
prepare3.setString(1,nickname); / K, V+ H7 T7 ~& V
ResultSet r2=prepare3.executeQuery();
- P7 d. {8 M: i9 Xwhile(r2.next()){ // 5 F5 E4 |* W4 Y3 I# [2 M
out.println(r2.getInt(1));
/ w/ x8 y5 Q8 }, pno=r2.getInt(1);
* {) I: M% r; E. dSystem.out.println(no); }
: {3 k' Q/ c1 P6 D8 ^% ]8 b. |7 U3 Jout.println(no);
$ D! F# l3 B! {- G& u" O3 lout.println("ok"); ; }2 H, d8 K" b4 e. ~: V! B
c2.close();//完毕 }
; x6 Z# R! |0 X; w, W/ |' Tcatch (Exception e){ 1 @6 u/ ?2 p- ]
e.printStackTrace();
& U% Z' k6 L6 \2 j) s# c  Sout.println("false");} 1 g& V! h: a2 N( F4 m  O! |% [
socket.close(); }//end new //新建用户结束 //以下处理用户查找好友 7 x# J3 q* a9 q: y$ T
else if(str.equals("find")){ 2 Z3 B. o" K9 b" O1 q! G& F) [
try{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); + N' P. p3 L& q4 z$ _
Connection c3=DriverManager.getConnection("jdbc:odbc:javaicq"," "," ");
8 ^+ M5 {# X: `6 ?4 u% k' T& }//以下连接数据库,并且返回其他用户的呢称,性别,籍贯,个人资料等信息
; E4 C9 u5 a- u- i% ?- \2 GString find="select nickname,sex,place,ip,email,info from icq"; - }' @/ M2 H6 c* O
Statement st=c3.createStatement(); 5 t8 x0 O6 C! [" w7 X3 t/ x* v
ResultSet result=st.executeQuery(find);
9 A4 f( B2 n7 N; V0 r# gwhile(result.next()){ 9 t" A* k9 F: Y
out.println(result.getString("nickname")); 3 i5 D3 ^1 w: E
out.println(result.getString("sex")); 8 O  Z, ~, ~/ B# K- M# i) e3 J: X' K
out.println(result.getString("place"));
2 C4 H8 _' g- c( q. e: o, b9 c0 \out.println(result.getString("ip"));
8 g8 x9 Z' M3 H. j: `, m- Uout.println(result.getString("email")); * r' r8 p6 f3 m; L0 w8 J' C
out.println(result.getString("info")); }//while end
  f' C# V0 u4 l/ Iout.println("over"); ////////GET ICQNO 7 l# g1 @% x6 L' N
int d,x;boolean y; 8 ?( ~1 o: c. Z) J
//以下返回用户的jicq号码,头像号,及是否在线 2 s6 _" f, K+ U- R
ResultSet iset=st.executeQuery("select icqno,pic,status from icq"); ' l0 ]; k) Y* o: `% V8 y) M
while(iset.next()){ 9 B9 ]8 V# Q/ V; g  |5 W( A
d=iset.getInt("icqno"); 0 p& ~  i: ?/ y. J. S0 Q7 U* {) o' |& X
out.println(d);
3 K6 [( E, i0 {3 Ex=iset.getInt("pic");//pic info
  L) N. M" q0 u0 @, Iout.println(x); $ @$ E7 K! a# U9 o6 i
y=iset.getBoolean("status");
* x% \7 L% ^. c0 Z: j/ oif (y){out.println("1");} 6 F0 k& ?: M4 N
else {out.println("0");} // ' x- P& }0 p2 W( r( h" y
System.out.println(d); } // end send jicqno 9 Q. l# c+ C4 G; `; D' `. ~! j
iset.close(); /////////icqno end 6 e3 O+ U( J& q! I/ v) q5 t# L- U
c3.close();   H* B6 L. s9 B; x' A
result.close(); }
$ w4 q3 w# h! \& Tcatch (Exception e){ 4 X% ?- f# Q- b% r0 j- @7 D5 k
e.printStackTrace();
  ^5 p5 {4 T# r) L; XSystem.out.println("false");} //socket.close(); }//end find ; S) a  q; M( y' f% D) \3 G0 }
//查找好友结束 //以下处理用户登录时读取其好友资料   G% \8 Y; r2 }" G1 o! Q( P3 c
else if(str.equals("friend")){ - [/ m" I7 X* x; `9 ^# t$ q' U
try{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); " K. ~: w; a1 _; m- n2 Z
Connection c4=DriverManager.getConnection("jdbc:odbc:javaicq"," "," "); 4 Y7 ~8 c6 }: f5 @9 |' ^+ K
//以下连接好友表,返回用户的好友名单 & \' p6 G: J  ?. P! V
String friend="select friend from friend where icqno=?";
) e# x2 \7 q4 v' rPreparedStatement prepare4=c4.prepareCall(friend);
  a! A9 B. Q/ K% J: B1 I  w4 uprepare4.clearParameters(); 9 l1 @+ q1 i$ ^
int icqno=Integer.parseInt(in.readLine()); 9 E5 v2 V; U8 v& U. J& C' ?2 o
System.out.println(icqno);
( B) e2 N  A; f  T; nprepare4.setInt(1,icqno);
$ z" l$ p0 q; N8 h$ c6 T9 @; ~" AResultSet r4=prepare4.executeQuery();
) r% K* h: s3 P. E3 GVector friendno=new Vector();//该矢量保存好友号码 * y: R+ v6 ?, J  F7 l$ o
while(r4.next()){ 6 K  w  F! S$ d8 @( ~
friendno.add(new Integer(r4.getInt(1))); } //read friend info 4 R6 h6 o( ?5 K+ ?6 i
//以下告诉客户其好友的呢称,号码,ip地址,状态,头像,个人资料等信息
, c* q! s  {  e2 yout.println(friendno.size());
4 Z2 d0 l2 n! _/ y2 Vfor(int i=0;i String friendinfo="select nickname,icqno,ip,status,pic,email,info from icq where icqno=?"; % O& \/ M4 I5 |( g; S
PreparedStatement prepare5=c4.prepareCall(friendinfo); & h0 W9 l9 V* _: e7 r7 E6 ]0 N
prepare5.clearParameters();
. z! I' j4 ~/ o1 aprepare5.setObject(1,friendno.get(i));
  `' V: ~& G4 e5 FResultSet r5=prepare5.executeQuery(); 1 Z& [/ @: U) l4 Z: G/ w) N; e
boolean status;
/ x, ^8 z* B8 h; ^' B( e1 v6 owhile(r5.next()){
- h" R7 `3 q9 L7 S, ~6 t0 `" nout.println(r5.getString("nickname"));
; w) U5 Q% ]: \" |. gout.println(r5.getInt("icqno"));
6 [' s- ?9 D9 q5 G6 c. B* aout.println(r5.getString("ip")); 8 |  ]2 Q+ Z; |1 n3 f
status=r5.getBoolean("status"); 6 j- l. s* F+ x3 y; Z
if (status) out.println("1");
, Y0 z. g: Q3 ?else {out.println("0");}
! ~6 f, A3 ?* yout.println(r5.getInt("pic")); 2 B% ]+ e$ W. d- d: f6 N5 @* E2 Q
out.println(r5.getString("email"));   x1 d4 I- [; Q2 x
out.println(r5.getString("info")); } //while 4 n1 i3 u( m/ L5 D3 a2 P
r5.close();}//for//发送完毕 : P9 g+ c2 D# [. u' b8 W3 p4 Z
out.println("over");
; O7 M" q4 N, |: T' {System.out.println("over"); 2 _5 M* ~7 m$ r) Y
c4.close(); - O% q8 r; b! K. U
r4.close(); } + q0 T. M$ v$ @" y$ S5 M' ^
catch (Exception e){ . `/ H8 d* ]  d- i+ n
e.printStackTrace(); 3 X) S, p7 |( x* @9 [8 y% C6 Y
System.out.println("false");} //socket.close(); }//end friend //读取好友信息完毕 3 j5 ?. m& d1 H3 e0 }  K* @
//以下处理用户添加好友
& X4 x& K! }( M+ i) nelse if(str.equals("addfriend")){
4 S& Y) ~+ `/ ?6 zSystem.out.println("add"); 3 N7 t$ {, n  j6 {# B! @* v
try{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
- \& X5 k/ h0 q4 x: P, D: uConnection c6=DriverManager.getConnection("jdbc:odbc:javaicq"," "," "); //连接数据库,根据接受的用户号码及好友号码向好友表添加记录 1 o+ ~' X" M- E6 O6 A5 y
int friendicqno=Integer.parseInt(in.readLine());
3 |5 I/ j: U8 w& RSystem.out.println(friendicqno);
/ D+ l" h' X2 w+ i+ ]; Lint myicqno=Integer.parseInt(in.readLine());
' H4 @: L+ H! D  o" CSystem.out.println(myicqno);
% `& {; v) J, S1 \  p& vString addfriend="insert into friend values(?,?)"; 4 Z* {' R- P, [
PreparedStatement prepare6=c6.prepareCall(addfriend);
: e7 h3 V& O' }! x) ?prepare6.clearParameters();
2 A- ?" a- W0 N* D' nprepare6.setInt(1,myicqno);
0 x) M" S, x2 z; ]! `" m! Lprepare6.setInt(2,friendicqno); : g# I# n* ]( C7 s& I$ a5 h
int r6=0; r6=prepare6.executeUpdate();
- t0 e& D8 p% o5 xif(r6==1) System.out.println("ok addfrien");
* c& H$ r) L* nelse System.out.println("false addfriend"); }
( w7 ]/ t+ v$ l' _, dcatch (Exception e){ - |( Q6 x  L% k1 V9 a9 I* U9 o
e.printStackTrace();
/ V0 G/ f* [7 [8 `7 G2 FSystem.out.println("false");} //socket.close();
4 R% q, g9 m3 Q: X# t! lSystem.out.println("over addfriend"); }//end addfriend //用户添加好友结束 //add new friend who add me ; x. }+ d. m$ c* i1 t
//以下处理其他用户如果加我,我就加他 . V* B' ^& t7 F. M/ c+ }8 L: ~
else if(str.equals("addnewfriend")){ # `5 `4 W* h' o' x: P0 B" |
System.out.println("add");
' r; E7 Y$ o0 B) Z6 }try{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
  \% ^4 M" b5 EConnection c6=DriverManager.getConnection("jdbc:odbc:javaicq"," "," "); //连接数据库,根据接受的用户号码及好友号码向好友表添加记录
$ t" m6 n+ s( X- @* y1 Gint friendicqno=Integer.parseInt(in.readLine()); 1 X) m9 B/ m  O: T
System.out.println(friendicqno); " [, [0 d  O$ g* Q3 m. L
int myicqno=Integer.parseInt(in.readLine()); , N  h) A, p% ^9 d" [( w5 b
System.out.println(myicqno);
( M8 K3 [1 q1 W8 L8 u# y. hString addfriend="insert into friend values(?,?)";
, s1 S0 K( f$ |) @PreparedStatement prepare6=c6.prepareCall(addfriend);
6 a8 a9 g, D8 b" I4 x5 yprepare6.clearParameters(); $ _+ U7 f9 X0 m5 w: l# `9 d
prepare6.setInt(1,myicqno); 4 t1 P7 B6 i  B0 J$ Q
prepare6.setInt(2,friendicqno);
/ r, Q7 ?* B7 C% U- \0 [& Lint r6=0;
% `- o6 E1 P  t# F$ Pr6=prepare6.executeUpdate();
  ]# P6 g2 a# Zif(r6==1) System.out.println("ok addfrien");
7 q3 c3 a! A5 C+ ?0 V  d" s5 celse System.out.println("false addfriend"); 8 n& w( \1 m& u+ \& T
String friendinfo="select nickname,icqno,ip,status,pic,email,info from icq where icqno=?"; //如果成功,就向用户传递好友的基本信息,比如呢称等
7 Y& F& {. w7 m% U  j0 mPreparedStatement prepare5=c6.prepareCall(friendinfo);
& |4 c7 X1 I% s7 @% dprepare5.clearParameters(); , l" X+ ^" E; {
prepare5.setInt(1,friendicqno);
& R1 t4 u  e( ]: {( M6 vResultSet r5=prepare5.executeQuery(); " g  S% \8 f+ d6 i6 t# f7 a2 k
boolean status; ; q. D+ Q# u! l6 y; R
while(r5.next()){ 0 |* P* w) Q0 ~" u/ ^5 J
System.out.println("dsf");
6 s; ?) J( v3 c4 r; G4 Nout.println(r5.getString("nickname"));
2 R% }' G/ T* [. E+ A  aout.println(r5.getInt("icqno")); 5 \4 i9 g- O7 ^, W, A% D
out.println(r5.getString("ip"));
6 W1 V- u2 O0 Q6 S' Gstatus=r5.getBoolean("status"); ! Y% b: K: g' t7 ~
if (status) out.println("1");
- V, W9 u; C& ~; helse {out.println("0");}
) L1 {. G, ^1 Y8 R) o1 b# zout.println(r5.getInt("pic")); ! `; L8 E/ C) P/ A7 K1 `
out.println(r5.getString("email")); ; Y+ F4 _1 E7 R7 c" D
out.println(r5.getString("info")); } //while out.println("over"); r5.close(); c6.close(); }
! u% T4 _0 r. [catch (Exception e){ * a5 o' ]" ^0 A! {) T% J! [/ _
e.printStackTrace();
" d4 Y: N( D: DSystem.out.println("false");}
. w+ q' Z+ q8 R4 h1 r5 j- Z3 gSystem.out.println("over addnewfriend"); }//end addfriend //结束处理其他用户如果加我,我就加他 , W/ A- I; U( {5 P, y
//delete friend //以下执行用户删除好友 ! \* {$ F) x7 n" h# S
else if(str.equals("delfriend")){ 0 |: }# m% {; [# O3 R
System.out.println("del");
* F* \3 M, l! }' D( s( Atry{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
8 |+ b8 y8 ~1 L# W6 |% m  wConnection c7=DriverManager.getConnection("jdbc:odbc:javaicq"," "," "); //连接数据库,根据接受的用户号码及好友号码向好友表删除记录 1 M8 `# }* \9 p9 @! B0 ?
int friendicqno=Integer.parseInt(in.readLine());
3 Y9 E/ M3 J1 _* d. l2 MSystem.out.println(friendicqno);
! Y9 y! E* @" c6 e9 x- Nint myicqno=Integer.parseInt(in.readLine());
* c5 N- R! S) ]) |System.out.println(myicqno); / T) h7 K5 @9 S  L% L! q& [: }
String addfriend="delete from friend where icqno=? and friend=?"; 9 g: j, q8 R7 Y; g) I/ M1 s
PreparedStatement prepare7=c7.prepareCall(addfriend);
8 X$ i5 v: Z8 Pprepare7.clearParameters(); 6 U3 s# n" j3 u; j# @; Q
prepare7.setInt(1,myicqno); $ \# j  F$ D6 o. @' k! C
prepare7.setInt(2,friendicqno); ( d' b5 B& E  m1 e% Z% {. W0 d
int r7=0; & {  A! g5 j" B  H5 T' E
r7=prepare7.executeUpdate(); # P. g8 U# m- |% C  d+ V6 a1 R) }
if(r7==1) System.out.println("ok delfrien");//成功
8 g5 d3 ?  w  selse System.out.println("false delfriend");//失败
# p; t  o: ]( G} 5 g- b1 U$ S) O8 m! O
catch (Exception e){e.printStackTrace();System.out.println("del false");} . L$ l, x/ e1 P& [! }: [' H' ~
}//end delete friend //执行用户删除好友结束 //以下处理用户退出程序
% R  @+ Y) G! P2 e7 K$ Y0 Xelse if(str.equals("logout")){
; R5 Y4 m2 a9 m6 ?: utry{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
' e6 H% \3 R+ KConnection c8=DriverManager.getConnection("jdbc:odbc:javaicq"," "," "); //连接数据库,根据接受的用户号码,将其状态字段设为0,及ip地址设为空
3 p' x0 ?# }" r% A/ Mint myicqno=Integer.parseInt(in.readLine()); : r6 E$ Z/ q5 U7 T
System.out.println(myicqno); 1 Y1 J  E/ D! n  o: V
String status="update icq set status=0 , ip=′ ′ where icqno=?"; 7 x7 ^7 q& J4 K7 B
PreparedStatement prest8=c8.prepareCall(status);
' _3 B" B+ g2 m; P9 kprest8.clearParameters();
' X4 a+ x8 d2 C' jprest8.setInt(1,myicqno); 7 @* E/ s5 [; X, g! U" L" X- c5 a
int r8=prest8.executeUpdate();
0 i# T: C) m+ _% R8 g5 pif(r8==1) System.out.println("ok logout"); 7 @+ `% O5 P7 A. h0 d* x% }
else System.out.println("false logout"); } - W% \% Y  O  Y7 U1 y# z1 [( `
catch (Exception e){e.printStackTrace();System.out.println("logout false");}
2 O! z# [7 X; V% T2 ^, w}//logout end //处理用户退出程序结束 //get who add me as friend : V% X. B& z! k  s2 G8 s! u# I2 e
//以下处理那些人加了我为好友,以便上线通知他们
4 J3 a2 s: t6 O( H1 Gelse if(str.equals("getwhoaddme")){ ' H5 `, ^/ w$ ^  E9 E- O
System.out.println("getwhoaddme");
$ V) \/ R0 S3 v0 Utry{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
! E* E2 {9 |; p$ N% [Connection c9=DriverManager.getConnection("jdbc:odbc:javaicq"," "," "); //连接数据库,根据我的号码,从好友表中选择谁加了我 3 p* F# e% a6 ?9 n# d) q' {
int myicqno=Integer.parseInt(in.readLine()); * u4 i2 O5 |% s, D; E+ Z4 x7 }& O8 S
System.out.println(myicqno); 4 I1 P' [/ d. U9 T, v  L, d
String getwhoaddme="select icqno from friend where friend=?";
! f( o* j0 K$ ~) d0 t) l) ZPreparedStatement prepare6=c9.prepareCall(getwhoaddme); 5 Z& `2 ]$ \# {: r
prepare6.clearParameters();
- U0 }) W- P. Bprepare6.setInt(1,myicqno);
& c2 S. P: N: A7 [( |1 hResultSet r6=prepare6.executeQuery();
' ]( r7 h. t5 v1 S' EVector who=new Vector(); " G; `* s" C7 C& O4 a# ~, r6 z1 {
while(r6.next()){ who.add(new Integer(r6.getInt(1))); }//end while //然后告诉这些好友的ip地址,然后发给用户以便告诉其他客户我上线了
- B% b0 L; ]- z  |for(int i=0;i { String whoinfo="select ip from icq where icqno=? and status=1";
$ e4 I- j2 h! IPreparedStatement prepare=c9.prepareCall(whoinfo); ( R1 M7 I/ z3 q* l6 k/ J
prepare.clearParameters();
3 V  h0 A3 n! Q6 _prepare.setObject(1,who.get(i));
+ P( L# \* D' x- R/ ?7 VResultSet r=prepare.executeQuery(); 5 ]  ~; p1 W% j) W
while(r.next()){ out.println(r.getString("ip"));} //while ' K+ s8 T: x$ f  i  m& `: C$ U
r.close(); }//for % v( @6 U- z- t7 W- t- b
out.println("over"); 1 q2 l; n4 K! W
System.out.println("over");
; B! B9 U3 D" O* q  Gc9.close(); - D4 I% ]* j" ]( }8 q7 S
r6.close(); } 8 p4 A/ T5 I+ c! i' O$ d  U+ L
catch (Exception e)
& O& G$ z' Z" a! `{e.printStackTrace();System.out.println("false");} : P7 y; g0 B6 _/ z) J
}//end get who add me as friend //处理上线结束 5 f) n1 ^' f# r* Y: x
System.out.println("Echo ing :"+str); }
! R7 s6 }6 N, @) T  e) u9 h2 mSystem.out.println("Close..."); } 5 ?" v: u7 |% |' d6 N$ h0 a
catch(IOException e){}//捕或异常 * Q# ^) C/ M+ r5 }
finally {try{socket.close();} + x' O$ B2 l: ?% r8 G  h# x
catch(IOException e){} } }}
  F2 _4 h% K# Z. m' k; Ypublic class Server 6 m; _% j3 r! h0 t8 S; w
{//主服务器类
9 d  ~9 D( U; d: x1 Jpublic static void main(String args[])
: s- s1 F* K4 \/ M/ x2 U$ cthrows IOException{ ServerSocket s=new ServerSocket(8080);//在8080端口创建套接口 5 S$ r* Y! B8 V4 _# p2 Q, X
System.out.println("Server start.."+s);
+ V1 E9 p; j) d; L/ O) |try{
" e5 X- j3 t; P+ U2 M3 N( }% Owhile(true) 0 Z+ v( V' {" H6 d3 D: j
{Socket socket=s.accept();//无限监听客户的请求 5 Y9 w; E# V: v$ R% F4 B, w
System.out.println("Connectino accept:"+socket);
1 O+ o, ~+ w2 m) z& k" ~) _try{new ServerThread(socket);}//创建新线程
+ [8 q/ Q7 R1 b% N  Scatch(IOException e){socket.close();}
, r, P/ `1 T+ @% }( P} # r" L' ]: N- E1 |7 p
}
4 m& n% L* Z7 U' |3 m# D' ~8 lfinally{s.close();}//捕或异常 , j8 n# S8 S, U* T# S5 b
} 7 d# l+ v# I4 Q9 E, A6 n! I8 ?
}//服务器程序结束
 
载入中...
 
   文章来源网络如无您的大名或您不同意我的收藏请到: 白沙的香烟盒管理之吧  告知白沙,我会做尽快处理!
------------------------------------------------------------------------------------------------------------------------------------------------------
 
 
发表评论:
载入中...
 
 
 
 统计信息
-------------------------------------
 
 免费电话
-------------------------------------------------------------------------------------------------------------------------------------------------------------

校园梦网网络电话,中国最优秀的网络电话