<dfn id="w48us"></dfn><ul id="w48us"></ul>
  • <ul id="w48us"></ul>
  • <del id="w48us"></del>
    <ul id="w48us"></ul>
  • 用java制作icq

    時間:2024-10-12 15:34:48 理工畢業論文 我要投稿
    • 相關推薦

    用java制作icq

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

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

    3.系統模式及程序(具體程序參看源程序)
    1.服務器程序: 服務器與客戶間通過套接口socket(tcp)連接。在java中使用套接口相當簡單,java api為處理套接口的通訊提供了一個類java.net.socket.,使得編寫網絡應用程序相對輕易.服務器采用多線程以滿足多用戶的請求,通過jdbc與后臺數據庫連接,并通過創建一個serversocket對象來監聽來自客戶的連接請求,默認端口為8080,然后無窮循環調用accept()方法接受客戶程序的連接服務器程序代碼如下:(部分)import java.io.*; import java.net.*; import java.sql.*; import java.util.vector; class serverthread extends thread{//繼續線程 private socket socket;//定義套接口 private bufferedreader in;//定義輸進流 private printwriter out;//定義輸出流 int no;//定義申請的jicq號碼 public serverthread(socket s) throws ioexception {//線程構造函數 socket=s;//取得傳遞參數 in=new bufferedreader(new inputstreamreader(socket.getinputstream()));//創建輸進流 out=new printwriter(new bufferedwriter(new outputstreamwriter(socket.getoutputstream())),true);//創建輸出流 start();//啟動線程 } public void run(){//線程監聽函數 try{ while(true){ string str=in.readline();//取得輸進字符串 if(str.equals("end"))break;//假如是結束就封閉連接 else if(str.equals("login")) {//假如是登錄 try{ class.forname("sun.jdbc.odbc.jdbcodbcdriver");//連接數據庫 connection c=drivermanager.getconnection("jdbc:odbc:javaicq"," "," "); string sql="select nickname,password from icq where icqno=?"; //預備從數據庫選擇呢稱和密碼 preparedstatement prepare=c.preparecall(sql);//設定數據庫查尋條件 string icqno=in.readline(); int g=integer.parseint(icqno);//取得輸進的jicq號碼 system.out.println(icqno); string passwd=in.readline().trim();//取得輸進的密碼 system.out.println(passwd); prepare.clearparameters(); prepare.setint(1,g);//設定參數 resultset r=prepare.executequery();//執行數據庫查尋 if(r.next()){//以下比較輸進的號碼于密碼是否相同 string pass=r.getstring("password").trim(); system.out.println(pass); if(passwd.regionmatches(0,pass,0,pass.length())){ out.println("ok");//假如相同就告訴客戶ok//并且更新數據庫用戶為在線//以及注冊用戶的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 //登錄結束 //以下為處理客戶的新建請求else if(str.equals("new")){ try{ class.forname("sun.jdbc.odbc.jdbcodbcdriver");//連接數據庫 connection c2=drivermanager.getconnection("jdbc:odbc:javaicq"," "," ");string newsql="insert into icq(nickname,password,email,info,place,pic) values(?,?,?,?,?,?)";//預備接受用戶的呢稱,密碼,email,個人資料,籍貫,頭像等信息 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();//執行數據庫添加string sql2="select icqno from icq where nickname=?";//以下告訴客戶其注冊的號碼 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 //新建用戶結束 //以下處理用戶查找好友 else if(str.equals("find")){ try{ class.forname("sun.jdbc.odbc.jdbcodbcdriver"); connection c3=drivermanager.getconnection("jdbc:odbc:javaicq"," "," "); //以下連接數據庫,并且返回其他用戶的呢稱,性別,籍貫,個人資料等信息 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號碼,頭像號,及是否在線 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 //查找好友結束 //以下處理用戶登錄時讀取其好友資料 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();//該矢量保存好友號碼 while(r4.next()){ friendno.add(new integer(r4.getint(1))); } //read friend info //以下告訴客戶其好友的呢稱,號碼,ip地址,狀態,頭像,個人資料等信息 out.println(friendno.size()); for(int i=0;i

    【用java制作icq】相關文章:

    Java語言與Java 技術03-20

    用java實現二重積分的計算03-07

    用RMI開發基于Java的企業分布式應用03-19

    java畢業設計開題報告03-26

    java畢業論文參考文獻05-11

    基于自然語言的短信查詢Java03-08

    JAVA五子棋游戲03-07

    簡單網絡實時消息傳遞工具的設計Java03-08

    最新Java開發畢業論文參考文獻07-07

    主站蜘蛛池模板: 久久se精品一区精品二区国产| 99riav国产精品| 秋霞午夜鲁丝片午夜精品久| 无码精品久久一区二区三区| 国产99视频精品一区| 亚洲AⅤ永久无码精品AA| 久久伊人精品青青草原高清| 亚洲精品V欧洲精品V日韩精品| 国产精品麻豆VA在线播放| 国产精品无码久久综合| 中文字幕久久精品无码| 国产精品一区二区久久精品无码| 91精品国产高清91久久久久久| 午夜精品久久久内射近拍高清| 99国产精品私拍pans大尺度| 国产AV午夜精品一区二区三区| 伊人久久精品无码av一区| 国产在线精品一区二区三区不卡| 国产精品久久成人影院| 久久精品无码一区二区无码 | 亚洲第一区精品日韩在线播放| 91久久精品视频| 久久久久免费精品国产| 国产精品免费高清在线观看| 亚洲av午夜福利精品一区| 香蕉依依精品视频在线播放 | 伊人精品久久久久7777| 精品欧美小视频在线观看| 欧美一区二区精品久久| 成人国产精品高清在线观看| 日韩精品极品视频在线观看免费 | 国产精品你懂得| 国产精品美女一区二区视频| 国产精品ⅴ无码大片在线看| 精品久久久无码人妻中文字幕豆芽 | 国产99视频精品免视看7 | 亚欧乱色国产精品免费视频| 久久久久人妻精品一区三寸蜜桃| 国产亚洲精品资在线| 久草热8精品视频在线观看| 欧美日韩综合精品|