亚洲国产日韩欧美在线a乱码,国产精品路线1路线2路线,亚洲视频一区,精品国产自,www狠狠,国产情侣激情在线视频免费看,亚洲成年网站在线观看

用java制作icq

時(shí)間:2023-03-21 21:40:36 理工畢業(yè)論文 我要投稿
  • 相關(guān)推薦

用java制作icq

分析icq系統(tǒng),并嘗試用java編寫。一.序言
icq是英文"i seek you "的簡稱,中文意思是我找你。icq最大的功能就是即時(shí)信息交流,只要記得對(duì)方的號(hào)碼,上網(wǎng)時(shí)可以呼他,無論他在哪里,只要他上網(wǎng)打開icq,人們就可以隨時(shí)交流。icq源于以色列特拉維夫的mirabils公司。該公司成立于1996年7月,也就是在這個(gè)時(shí)候,互聯(lián)網(wǎng)上最出名,下載使用人數(shù)最多的免費(fèi)軟件icq誕生了?赡苁瞧洳粩嘣黾拥挠脩艉蛷V闊的遠(yuǎn)景以及廣泛的應(yīng)用遠(yuǎn)景和巨大的市場潛力,mirabils的icq終極被美國在線aol收購。由于icq的成功,推動(dòng)了icq的本土化,就中文的icq而言,現(xiàn)在已經(jīng)越來越多,比如著名的深圳騰迅公司推出的oicq(現(xiàn)在由于版權(quán)題目,已改名為qq2001),還有由tom.com推出的tomq等,這些軟件技術(shù)都很好,而且簡單易用,成為中國網(wǎng)民最喜歡的通訊軟件。但是這些公司都只提供軟件的客戶端程序免費(fèi)下載,而不提供其服務(wù)器程序,因此對(duì)于未與互聯(lián)網(wǎng)連接的私有網(wǎng)絡(luò),這些軟件就用不上了。當(dāng)然網(wǎng)上也有免費(fèi)的類似icq的服務(wù)器提供下載,但是好多都不提供源程序,即使有,其說明也很簡單,我很想知道它是怎么回事,所以我就試著做了。二.設(shè)計(jì)1.為什么選擇java?
java是sun microsystem公司的james gosling開發(fā)的編程語言。它以c 為基礎(chǔ),但是卻是一個(gè)全新的軟件開發(fā)語言。java是一個(gè)簡單,面象對(duì)象,分布式,解釋性,強(qiáng)壯,安全,與系統(tǒng)無關(guān),可移植,高性能,多線程和動(dòng)態(tài)的語言-------這是 sun給java的定義。sun公司的口號(hào)就是"網(wǎng)絡(luò)就是計(jì)算機(jī)",java能使所有東西從桌面計(jì)算平穩(wěn)的轉(zhuǎn)變?yōu)榛诰W(wǎng)絡(luò)的計(jì)算,它是專門為此而建立的,并顯然是為了完成這個(gè)任務(wù)而來的。使用java,我們可以相對(duì)輕松的一天編寫一個(gè)有條理的網(wǎng)絡(luò)程序。今天,java的網(wǎng)絡(luò)功能正在奔騰發(fā)展,不斷有新的特性增加到這個(gè)有價(jià)值的基礎(chǔ)上,javasoft實(shí)驗(yàn)室正在不斷努力使java更加完善。2.?dāng)?shù)據(jù)庫設(shè)計(jì)
系統(tǒng)可以采用任何一種流行的,java支持的數(shù)據(jù)庫,本系統(tǒng)采用了microsoft公司的sql server2000作為后臺(tái)數(shù)據(jù)庫。通過對(duì)現(xiàn)在流行的一些icq的參考,建立數(shù)據(jù)庫,名為javaicq,數(shù)據(jù)庫共建立兩個(gè)表,一個(gè)是用戶的基本信息,包括呢稱,jicq號(hào)碼等。一個(gè)是用戶的好友表,包括用戶自己的號(hào)碼和好友的號(hào)碼。(1)用戶的基本信息表(表名icq)序號(hào)字段名含義數(shù)據(jù)類型null1icqno用戶的號(hào)碼intno2nickname用戶的呢稱charno3password用戶的密碼charno4status用戶在線否bitno5ip用戶的ip地址charyes6info用戶的資料varcharyes7pic用戶的頭像號(hào)intyes8***用戶性別charyes9email用戶的emailcharyes10place用戶的籍貫charyes其中icqno字段為自動(dòng)增加。(其他還可以添加諸如電話號(hào)碼等字段作為更多選擇)

(2)用戶的好友表(表名friend)序號(hào)字段名含義數(shù)據(jù)類型null1icqno用戶的號(hào)碼intno2friend好友的號(hào)碼intno

3.系統(tǒng)模式及程序(具體程序參看源程序)
1.服務(wù)器程序: 服務(wù)器與客戶間通過套接口socket(tcp)連接。在java中使用套接口相當(dāng)簡單,java api為處理套接口的通訊提供了一個(gè)類java.net.socket.,使得編寫網(wǎng)絡(luò)應(yīng)用程序相對(duì)輕易.服務(wù)器采用多線程以滿足多用戶的請求,通過jdbc與后臺(tái)數(shù)據(jù)庫連接,并通過創(chuàng)建一個(gè)serversocket對(duì)象來監(jiān)聽來自客戶的連接請求,默認(rèn)端口為8080,然后無窮循環(huán)調(diào)用accept()方法接受客戶程序的連接服務(wù)器程序代碼如下:(部分)import java.io.*; import java.net.*; import java.sql.*; import java.util.vector; class serverthread extends thread{//繼續(xù)線程 private socket socket;//定義套接口 private bufferedreader in;//定義輸進(jìn)流 private printwriter out;//定義輸出流 int no;//定義申請的jicq號(hào)碼 public serverthread(socket s) throws ioexception {//線程構(gòu)造函數(shù) socket=s;//取得傳遞參數(shù) in=new bufferedreader(new inputstreamreader(socket.getinputstream()));//創(chuàng)建輸進(jìn)流 out=new printwriter(new bufferedwriter(new outputstreamwriter(socket.getoutputstream())),true);//創(chuàng)建輸出流 start();//啟動(dòng)線程 } public void run(){//線程監(jiān)聽函數(shù) try{ while(true){ string str=in.readline();//取得輸進(jìn)字符串 if(str.equals("end"))break;//假如是結(jié)束就封閉連接 else if(str.equals("login")) {//假如是登錄 try{ class.forname("sun.jdbc.odbc.jdbcodbcdriver");//連接數(shù)據(jù)庫 connection c=drivermanager.getconnection("jdbc:odbc:javaicq"," "," "); string sql="select nickname,password from icq where icqno=?"; //預(yù)備從數(shù)據(jù)庫選擇呢稱和密碼 preparedstatement prepare=c.preparecall(sql);//設(shè)定數(shù)據(jù)庫查尋條件 string icqno=in.readline(); int g=integer.parseint(icqno);//取得輸進(jìn)的jicq號(hào)碼 system.out.println(icqno); string passwd=in.readline().trim();//取得輸進(jìn)的密碼 system.out.println(passwd); prepare.clearparameters(); prepare.setint(1,g);//設(shè)定參數(shù) resultset r=prepare.executequery();//執(zhí)行數(shù)據(jù)庫查尋 if(r.next()){//以下比較輸進(jìn)的號(hào)碼于密碼是否相同 string pass=r.getstring("password").trim(); system.out.println(pass); if(passwd.regionmatches(0,pass,0,pass.length())){ out.println("ok");//假如相同就告訴客戶ok//并且更新數(shù)據(jù)庫用戶為在線//以及注冊用戶的ip 地址 //*************register ipaddress string setip="update icq set ip=? where icqno=?"; preparedstatement prest=c.preparecall(setip); prest.clearparameters(); prest.setstring(1,socket.getinetaddress().gethostaddress()); prest.setint(2,g); int set=prest.executeupdate(); system.out.println(set); //*************ipaddress //set status online string status="update icq set status=1 where icqno=?"; preparedstatement prest2=c.preparecall(status); prest2.clearparameters(); prest2.setint(1,g); int set2=prest2.executeupdate(); system.out.println(set2); //set online}//否者告訴客戶失敗 else out.println("false");r.close();c.close();} else{ out.println("false"); system.out.println("false"); r.close(); c.close();} }catch (exception e){e.printstacktrace();} socket.close(); }//end login //登錄結(jié)束 //以下為處理客戶的新建請求else if(str.equals("new")){ try{ class.forname("sun.jdbc.odbc.jdbcodbcdriver");//連接數(shù)據(jù)庫 connection c2=drivermanager.getconnection("jdbc:odbc:javaicq"," "," ");string newsql="insert into icq(nickname,password,email,info,place,pic) values(?,?,?,?,?,?)";//預(yù)備接受用戶的呢稱,密碼,email,個(gè)人資料,籍貫,頭像等信息 preparedstatement prepare2=c2.preparecall(newsql); string nickname=in.readline().trim(); string password=in.readline().trim(); string email=in.readline().trim(); string info=in.readline().trim(); string place=in.readline().trim(); int picindex=integer.parseint(in.readline()); prepare2.clearparameters(); prepare2.setstring(1,nickname); prepare2.setstring(2,password); prepare2.setstring(3,email); prepare2.setstring(4,info); prepare2.setstring(5,place); prepare2.setint(6,picindex); int r3=prepare2.executeupdate();//執(zhí)行數(shù)據(jù)庫添加string sql2="select icqno from icq where nickname=?";//以下告訴客戶其注冊的號(hào)碼 preparedstatement prepare3=c2.preparecall(sql2); prepare3.clearparameters(); prepare3.setstring(1,nickname); resultset r2=prepare3.executequery(); while(r2.next()){ //out.println(r2.getint(1)); no=r2.getint(1); system.out.println(no); } out.println(no); out.println("ok");c2.close();//完畢 }catch (exception e){e.printstacktrace();out.println("false");} socket.close(); }//end new //新建用戶結(jié)束 //以下處理用戶查找好友 else if(str.equals("find")){ try{ class.forname("sun.jdbc.odbc.jdbcodbcdriver"); connection c3=drivermanager.getconnection("jdbc:odbc:javaicq"," "," "); //以下連接數(shù)據(jù)庫,并且返回其他用戶的呢稱,性別,籍貫,個(gè)人資料等信息 string find="select nickname,***,place,ip,email,info from icq"; statement st=c3.createstatement(); resultset result=st.executequery(find); while(result.next()){ out.println(result.getstring("nickname")); out.println(result.getstring("***")); out.println(result.getstring("place")); out.println(result.getstring("ip")); out.println(result.getstring("email")); out.println(result.getstring("info")); }//while end out.println("over"); ////////get icqno int d,x;boolean y;//以下返回用戶的jicq號(hào)碼,頭像號(hào),及是否在線 resultset iset=st.executequery("select icqno,pic,status from icq"); while(iset.next()){ d=iset.getint("icqno"); out.println(d); x=iset.getint("pic");//pic info out.println(x); y=iset.getboolean("status"); if (y){out.println("1");} else {out.println("0");} //system.out.println(d); } // end send jicqno iset.close(); /////////icqno end c3.close();result.close(); }catch (exception e){e.printstacktrace();system.out.println("false");} //socket.close(); }//end find //查找好友結(jié)束 //以下處理用戶登錄時(shí)讀取其好友資料 else if(str.equals("friend")){ try{ class.forname("sun.jdbc.odbc.jdbcodbcdriver"); connection c4=drivermanager.getconnection("jdbc:odbc:javaicq"," "," "); //以下連接好友表,返回用戶的好友名單 string friend="select friend from friend where icqno=?"; preparedstatement prepare4=c4.preparecall(friend); prepare4.clearparameters(); int icqno=integer.parseint(in.readline()); system.out.println(icqno); prepare4.setint(1,icqno); resultset r4=prepare4.executequery(); vector friendno=new vector();//該矢量保存好友號(hào)碼 while(r4.next()){ friendno.add(new integer(r4.getint(1))); } //read friend info //以下告訴客戶其好友的呢稱,號(hào)碼,ip地址,狀態(tài),頭像,個(gè)人資料等信息 out.println(friendno.size()); for(int i=0;i

【用java制作icq】相關(guān)文章:

java畢業(yè)論文參考文獻(xiàn)10-13

最新java畢業(yè)設(shè)計(jì)論文參考文獻(xiàn)09-20

動(dòng)畫制作參考文獻(xiàn)04-12

學(xué)生自創(chuàng)小樂器的制作04-28

微課制作論文答辯06-29

都市頻道制作網(wǎng)的設(shè)計(jì)與實(shí)現(xiàn)05-29

簡易雞毛毽的制作的步驟分析09-21

文本方式下圖形提示界面制作05-10

都市頻道新聞制作網(wǎng)的設(shè)計(jì)與安裝05-31

用PC測量交變磁場05-11