Java聊天工具課程設(shè)計(jì)報(bào)告_第1頁(yè)
Java聊天工具課程設(shè)計(jì)報(bào)告_第2頁(yè)
Java聊天工具課程設(shè)計(jì)報(bào)告_第3頁(yè)
Java聊天工具課程設(shè)計(jì)報(bào)告_第4頁(yè)
Java聊天工具課程設(shè)計(jì)報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩15頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

Java網(wǎng)絡(luò)編程實(shí)踐()課程設(shè)計(jì)說(shuō)明書(shū)課程名稱:Java網(wǎng)絡(luò)編程課程設(shè)計(jì)_題目:__基于C/S的班級(jí)即時(shí)通訊工具姓名:于明帥朱燁楓__________學(xué)號(hào):201105407201105423教學(xué)班號(hào):軟件工程1101班指導(dǎo)教師:王小剛_______蘭州交通大學(xué)軟件科學(xué)與工程系二○一二年十二月二十七日J(rèn)ava網(wǎng)絡(luò)編程實(shí)踐任務(wù)書(shū)目的:熟悉JAVA語(yǔ)法,掌握?qǐng)D形化界面、多線程、網(wǎng)絡(luò)、數(shù)據(jù)庫(kù)等綜合編程,掌握用編程語(yǔ)言開(kāi)發(fā)由若干功能組成的小型項(xiàng)目的基本流程,增強(qiáng)動(dòng)手實(shí)踐能力,鞏固和加強(qiáng)書(shū)本知識(shí)的學(xué)習(xí),體會(huì)JAVA編程的特點(diǎn)。題目1:基于C/S的班級(jí)即時(shí)通訊工具(2人)要求:C/S模式,基于Socket實(shí)現(xiàn),服務(wù)器端用多線程來(lái)處理同時(shí)多個(gè)客戶端連接。數(shù)據(jù)存儲(chǔ):服務(wù)器端存儲(chǔ)最少一個(gè)班級(jí)的信息;最好多個(gè)班級(jí),主要存儲(chǔ)班級(jí)若干學(xué)生的基本信息。用數(shù)據(jù)庫(kù)存儲(chǔ)。下面所有功能只考慮一個(gè)班是基本實(shí)現(xiàn),考慮多個(gè)班是拓展實(shí)現(xiàn)。界面:GUI界面,友好直觀,布局合理,方便的功能入口。功能:登陸輸入用戶名和密碼;用戶名是學(xué)號(hào),有初始密碼,例如111111;登陸驗(yàn)證根據(jù)服務(wù)器端存儲(chǔ)的班級(jí)信息,對(duì)輸入的用戶進(jìn)行驗(yàn)證,看是否存在于該班(只考慮一個(gè)班的情況)。或是否是某個(gè)班的學(xué)生(多個(gè)班的情況)。驗(yàn)證通過(guò)進(jìn)入主界面,否則給出錯(cuò)誤提示。主界面列出該學(xué)生好友列表(同班級(jí)同學(xué)默認(rèn)全是該生好友,如果是多個(gè)班則可以添加別班好友并經(jīng)對(duì)方批準(zhǔn))。即時(shí)聊天,選中某個(gè)好友,雙擊打開(kāi)窗口聊天。如果不在線則服務(wù)器等對(duì)方上線后轉(zhuǎn)發(fā)(此功能屬拓展實(shí)現(xiàn))。可以修改自己的登陸密碼。題目2:基于C/S的班級(jí)聊天室(群聊)工具(2人)要求:C/S模式,基于Socket實(shí)現(xiàn),服務(wù)器端用多線程來(lái)處理同時(shí)多個(gè)客戶端連接。數(shù)據(jù)存儲(chǔ):服務(wù)器端存儲(chǔ)一個(gè)班級(jí)的信息;主要存儲(chǔ)班級(jí)若干學(xué)生的基本信息。用數(shù)據(jù)庫(kù)存儲(chǔ)。界面:GUI界面,友好直觀,布局合理,方便的功能入口。功能:登陸輸入用戶名和密碼;用戶名是學(xué)號(hào),有初始密碼,例如111111;登陸驗(yàn)證根據(jù)服務(wù)器端存儲(chǔ)的班級(jí)信息,對(duì)輸入的用戶進(jìn)行驗(yàn)證,看是否存在于該班。驗(yàn)證通過(guò)進(jìn)入主界面,否則給出錯(cuò)誤提示。主界面應(yīng)劃分幾個(gè)部分,至少有聊天室窗口部分(顯示多人的聊天信息),自身發(fā)送聊天信息的窗口部分,聊天室成員列表部分,最好實(shí)現(xiàn)在線用戶區(qū)別顯示(此功能屬拓展實(shí)現(xiàn))等。進(jìn)入主界面就可以參與群聊??梢孕薷淖约旱牡顷懨艽a。題目3:基于C/S的學(xué)生信息管理(1人)實(shí)現(xiàn)應(yīng)用,可以通過(guò)網(wǎng)絡(luò)在客戶端對(duì)存放在服務(wù)器端的學(xué)生信息表(至少包含學(xué)號(hào)、姓名、性別、年齡、籍貫等字段)學(xué)生紀(jì)錄增、刪、改、查,并返回結(jié)果。要能通過(guò)菜單選擇功能?;赟ocket,多客戶端使用多線程,以能同時(shí)從多個(gè)客戶端執(zhí)行功能。必須提供友好直觀、布局合理的圖形界面選擇功能、顯示信息和填寫(xiě)修改信息。成員名單:于明帥、朱燁楓分工列表登陸界面于明帥修改密碼界面朱燁楓聊天窗口界面于明帥服務(wù)器代碼朱燁楓連接數(shù)據(jù)庫(kù)朱燁楓課程設(shè)計(jì)報(bào)告于明帥項(xiàng)目簡(jiǎn)述和目的聊天室做為即時(shí)通訊的一種,即時(shí)通訊(InstantMessenger,簡(jiǎn)稱IM)軟件可以說(shuō)是目前我國(guó)上網(wǎng)用戶使用率最高的軟件,無(wú)論是老牌的ICQ,還是國(guó)內(nèi)用戶量第一的騰訊QQ,以及微軟的MSNMessenger都是大眾關(guān)注的焦點(diǎn),它們能讓你迅速地在網(wǎng)上找到你的朋友或工作伙伴,可以實(shí)時(shí)交談和互傳信息。而且,現(xiàn)在不少I(mǎi)M軟件還集成了數(shù)據(jù)交換、語(yǔ)音聊天、網(wǎng)絡(luò)會(huì)議、電子郵件的功能。要求:C/S模式,基于Socket實(shí)現(xiàn),服務(wù)器端用多線程來(lái)處理同時(shí)多個(gè)客戶端連接。數(shù)據(jù)存儲(chǔ):服務(wù)器端存儲(chǔ)最少一個(gè)班級(jí)的信息;最好多個(gè)班級(jí),主要存儲(chǔ)班級(jí)若干學(xué)生的基本信息。用數(shù)據(jù)庫(kù)存儲(chǔ)。下面所有功能只考慮一個(gè)班是基本實(shí)現(xiàn),考慮多個(gè)班是拓展實(shí)現(xiàn)。界面:GUI界面,友好直觀,布局合理,方便的功能入口。功能:登陸輸入用戶名和密碼;用戶名是學(xué)號(hào),有初始密碼,例如111111;登陸驗(yàn)證根據(jù)服務(wù)器端存儲(chǔ)的班級(jí)信息,對(duì)輸入的用戶進(jìn)行驗(yàn)證,看是否存在于該班(只考慮一個(gè)班的情況)。或是否是某個(gè)班的學(xué)生(多個(gè)班的情況)。驗(yàn)證通過(guò)進(jìn)入主界面,否則給出錯(cuò)誤提示。主界面列出該學(xué)生好友列表(同班級(jí)同學(xué)默認(rèn)全是該生好友,如果是多個(gè)班則可以添加別班好友并經(jīng)對(duì)方批準(zhǔn))。即時(shí)聊天,選中某個(gè)好友,雙擊打開(kāi)窗口聊天。如果不在線則服務(wù)器等對(duì)方上線后轉(zhuǎn)發(fā)(此功能屬拓展實(shí)現(xiàn))??梢孕薷淖约旱牡顷懨艽a。目的:通過(guò)此項(xiàng)目實(shí)訓(xùn)——JAVA聊天室的設(shè)計(jì),實(shí)踐、總結(jié)、回顧了網(wǎng)絡(luò)編程思想以及編程方法,并通過(guò)編寫(xiě)程序來(lái)掌握J(rèn)ava語(yǔ)言編程技巧,將學(xué)習(xí)到的知識(shí)融會(huì)貫通,同時(shí)提高調(diào)試程序的能力,養(yǎng)成良好的編程習(xí)慣,并增強(qiáng)對(duì)程序設(shè)計(jì)整體思路的把握,理論與時(shí)間相結(jié)合。本文的主要工作集中在:該課程基于C/S模式,客戶機(jī)向服務(wù)器發(fā)聊天請(qǐng)求,服務(wù)器應(yīng)答并能顯示客戶機(jī)發(fā)過(guò)來(lái)的信息。當(dāng)用戶聊天時(shí),將當(dāng)前用戶名、聊天對(duì)象、聊天,內(nèi)容、聊天語(yǔ)氣和是否私聊進(jìn)行封裝,然后與服務(wù)器建立Socket連接,再用對(duì)象輸出流包裝Socket的輸出流將聊天信息對(duì)象發(fā)送給服務(wù)器端。當(dāng)用戶發(fā)送聊天信息時(shí),服務(wù)端將會(huì)收到客戶端用Socket傳輸過(guò)來(lái)的聊天信息對(duì)象,然后將其強(qiáng)制轉(zhuǎn)換為Chat對(duì)象,接收用戶的聊天信息是由多線程技術(shù)實(shí)現(xiàn)的,因?yàn)榭蛻舳吮仨殨r(shí)時(shí)關(guān)注更新服務(wù)器上是否有最新消息,當(dāng)每次用戶接收到聊天信息后將會(huì)開(kāi)始分析聊天信息然后將適合自己的信息人性化地顯示在聊天信息界面上。進(jìn)一步培養(yǎng)學(xué)生面向?qū)ο蟪绦蛟O(shè)計(jì)的思想,加深對(duì)面向?qū)ο蟪绦蛟O(shè)計(jì)四大特性的理解,針對(duì)JAVA語(yǔ)言中的重點(diǎn)和難點(diǎn)內(nèi)容進(jìn)行訓(xùn)練,獨(dú)立完成有一定工作量的程序設(shè)計(jì)任務(wù),同時(shí)強(qiáng)調(diào)好的程序設(shè)計(jì)風(fēng)格。解題基本思路當(dāng)用戶聊天時(shí),將當(dāng)前用戶名、聊天對(duì)象、聊天內(nèi)容、聊天語(yǔ)氣和是否私聊進(jìn)行封裝,然后與服務(wù)器建立Socket連接,再用對(duì)象輸出流包裝Socket的輸出流將聊天信息對(duì)象發(fā)送給服務(wù)器端。

當(dāng)用戶發(fā)送聊天信息時(shí),服務(wù)端將會(huì)收到客戶端用Socket傳輸過(guò)來(lái)的聊天信息對(duì)象,然后將其強(qiáng)制轉(zhuǎn)換為Chat對(duì)象,并將本次用戶的聊天信息對(duì)象添加到聊天對(duì)象集Message中,以供所有聊天用戶訪問(wèn),具體實(shí)現(xiàn)過(guò)程如圖3-6所示。

接收用戶的聊天信息是由多線程技術(shù)實(shí)現(xiàn)的,因?yàn)榭蛻舳吮仨殨r(shí)時(shí)關(guān)注更新服務(wù)器上是否有最新消息,在本程序中設(shè)定的是3秒刷新服務(wù)器一次,如果間隔時(shí)間太短將會(huì)增加客戶端與服務(wù)器端的通信負(fù)擔(dān),而間隔時(shí)間長(zhǎng)就會(huì)讓人感覺(jué)沒(méi)有時(shí)效性,所以經(jīng)過(guò)權(quán)衡后認(rèn)為3秒最佳,因?yàn)槊總€(gè)用戶都不可能在3秒內(nèi)連續(xù)發(fā)送信息。

當(dāng)每次用戶接收到聊天信息后將會(huì)開(kāi)始分析聊天信息然后將適合自己的信息人性化地顯示在聊天信息界面上。分析和設(shè)計(jì)本系統(tǒng)主要通過(guò)客戶端,服務(wù)器端來(lái)體現(xiàn)聊天系統(tǒng)的基本功能。(1)服務(wù)器端1.處理用戶登錄2.處理用戶發(fā)送信息,服務(wù)器監(jiān)控聊天內(nèi)容,服務(wù)器過(guò)濾非法內(nèi)容3.處理用戶得到信息4.處理用戶退出 5.保存用戶聊天信息。(2)客戶端 1.用戶登錄界面及結(jié)果 2.用戶發(fā)送信息界面及結(jié)果 3.用戶得到信息界面及結(jié)果 4.用戶退出界面及結(jié)果目前國(guó)內(nèi)外做聊天系統(tǒng)的公司很多,產(chǎn)品也琳瑯滿目,國(guó)內(nèi)有諸如騰訊QQ、新浪UC、網(wǎng)易泡泡等,國(guó)外有著名的MSN(新版改名為L(zhǎng)iveMessenger)以及跨平臺(tái)Gaim等。本人取最具代表性的QQ和MSN進(jìn)行了一些研究,作為我開(kāi)發(fā)聊天系統(tǒng)的準(zhǔn)備。騰訊無(wú)疑是國(guó)內(nèi)即時(shí)通訊市場(chǎng)的霸主,自從99年進(jìn)入即時(shí)通訊領(lǐng)域并迅速占市場(chǎng)之后,其在國(guó)內(nèi)用戶數(shù)量始終高居榜首,即使近幾年面對(duì)微軟MSN的強(qiáng)大攻勢(shì),騰訊QQ的時(shí)常占有率依然穩(wěn)步增長(zhǎng)。騰訊的成功與其對(duì)QQ的不斷創(chuàng)新和完善是分不開(kāi)的。參考了許多網(wǎng)絡(luò)上的資料,以及自己通過(guò)觀察騰訊QQ運(yùn)行時(shí)的各種細(xì)節(jié)??梢源_定騰訊QQ是以多服務(wù)器提供服務(wù)、服務(wù)器總控客戶端、客戶端之間UDP直連通信的。并且在兩個(gè)客戶端之間不能建立直連的情況下,才由服務(wù)器進(jìn)行中轉(zhuǎn)通信。其模型如圖1-1主要程序源代碼客戶端主要代碼:importjava.awt.*;importjava.awt.List;importjava.awt.event.*;importjava.io.*;import.*;importjava.text.SimpleDateFormat;importjava.util.Date;importjavax.swing.*;publicclassChatlogoextendsJFrame{ JFramea1=newJFrame("QQ2012");//創(chuàng)建登錄窗口 JLabellab1=newJLabel("賬號(hào)"); JLabellab2=newJLabel("密碼"); JButtonbt1=newJButton("登錄"); JButtonbt2=newJButton("修改密碼"); JTextFieldtext1=newJTextField(26); JPasswordFieldpasf1=newJPasswordField(26); //設(shè)置文本框長(zhǎng)度 JFramea2=newJFrame("修改密碼");//創(chuàng)建修改密碼窗口 JLabellab3=newJLabel("賬號(hào)"); JLabellab4=newJLabel("新密碼"); JLabellab5=newJLabel("確認(rèn)密碼"); JButtonbt3=newJButton("確定"); JButtonbt4=newJButton("取消"); JTextFieldtext2=newJTextField(22); JPasswordFieldpasf2=newJPasswordField(23); JPasswordFieldpasf3=newJPasswordField(23); JPanelpanel1=newJPanel(newFlowLayout(FlowLayout.LEFT,15,10)); JPanelpanel2=newJPanel(newFlowLayout(FlowLayout.LEFT,70,30)); JPanelpanel3=newJPanel(newFlowLayout(FlowLayout.CENTER,10,10)); //設(shè)置按鈕及文本框位置 JFramea3=newJFrame();//創(chuàng)建聊天窗口 JPanelpanel4=newJPanel(); JPanelpanel5=newJPanel(); JTextAreaarea1=newJTextArea(12,10); JTextAreaarea2=newJTextArea(12,8); JScrollPanescroll1=newJScrollPane(area1); JScrollPanescroll2=newJScrollPane(area2); //創(chuàng)建文本區(qū) JButtonbt5=newJButton("發(fā)送"); JButtonbt6=newJButton("關(guān)閉窗口"); Listlist=newList(15,false); Checkboxcb=newCheckbox("私聊"); Choicechoice=newChoice();//添加下拉列表框 BufferedReaderbufferedreader; PrintStreamprintStream; Socketsocket; booleanbool=true; ObjectInputStreamois; ObjectOutputStreamoos; JPanelimagePanel1; ImageIconbackground1; //添加背景圖片 publicChatlogo(){ //choice.add("群聊"); //choice.add("私聊"); a1.add(lab1); a1.add(text1); a1.add(lab2); a1.add(pasf1); a1.add(bt1); a1.add(bt2); background1=newImageIcon("d:\\tt.jpg");//背景圖片來(lái)源 JLabellabel=newJLabel(background1);//利用標(biāo)簽添加背景圖片 label.setBounds(0,0,background1.getIconWidth(), background1.getIconHeight()); imagePanel1=(JPanel)a1.getContentPane(); imagePanel1.setOpaque(false); imagePanel1.setLayout(newFlowLayout());//設(shè)置背景圖片位置 a1.getLayeredPane().setLayout(null); a1.getLayeredPane().add(label,newInteger(Integer.MIN_VALUE)); a1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); a1.setSize(background1.getIconWidth(),background1.getIconHeight()); a1.setResizable(false); a1.setVisible(true); panel1.add(panel2); panel3.add(lab3); panel3.add(text2); panel3.add(lab4); panel3.add(pasf2); panel3.add(lab5); panel3.add(pasf3); panel3.add(bt3); panel3.add(bt4); a2.add(panel3); a2.setSize(300,300);//設(shè)置修改密碼窗口大小 a1.setVisible(true); a3.setSize(500,400);//設(shè)置聊天窗口大小 a3.add(panel4,BorderLayout.CENTER); a3.add(panel5,BorderLayout.SOUTH); a3.add(list,BorderLayout.EAST); //設(shè)置各按鈕的布局 panel5.add(bt5); panel5.add(bt6); panel5.add(cb); panel5.add(choice); panel4.setLayout(newGridLayout(2,1)); panel4.add(scroll1); panel4.add(scroll2); bt1.addActionListener(newActionListener(){ publicvoidactionPerformed(ActionEventae1){//監(jiān)聽(tīng)動(dòng)作事件 booleantemp=false; try{ bufferedreader=newBufferedReader(newFileReader("d:\\pwd.txt")); StringsName=""; while((sName=bufferedreader.readLine())!=null){ String[]sarr=sName.split(""); if((text1.getText().equals(sarr[0]))&&(pasf1.getText().equals(sarr[1]))){ temp=true; break; }else{ temp=false; } } if(temp==false){ JOptionPane.showMessageDialog(a1,"對(duì)不起,密碼錯(cuò)誤或用戶不存在!"); }else{ oos.writeObject("賬號(hào):"+text1.getText()); a1.setVisible(false); a3.setTitle(text1.getText()); a3.setVisible(true); } //調(diào)用文本中的信息,進(jìn)行賬號(hào)登陸 bufferedreader.close(); }catch(FileNotFoundExceptione1){//拋出異常事件 //TODOAuto-generatedcatchblock e1.printStackTrace(); }catch(IOExceptione1){//TODOAuto-generatedcatchblock e1.printStackTrace(); } } }); bt2.addActionListener(newActionListener(){ publicvoidactionPerformed(ActionEvente){ a1.setVisible(false); a2.setVisible(true); } }); bt3.addActionListener(newActionListener(){ publicvoidactionPerformed(ActionEventae2){ try{ PrintWriterprintwrite=newPrintWriter(newFileWriter("d:\\pwd.txt",true)); Strings1=text2.getText(); Strings2=pasf2.getText(); Strings4=pasf3.getText(); Strings3=s1+""+s2; bufferedreader=newBufferedReader(newFileReader("d:\\pwd.txt")); Stringss=bufferedreader.readLine(); inta=0; while(ss!=null){ String[]sss=ss.split(""); a=compare(sss[0],s1); if(s2.equals(s4)) { if(a==1){ JOptionPane.showMessageDialog(a2,"該賬號(hào)已被使用"); break; } ss=bufferedreader.readLine(); if(a==0){ printwrite.println(s3); JOptionPane.showMessageDialog(a2,"密碼修改成功"); a2.setVisible(false); a1.setVisible(true); break; } } else{ JOptionPane.showMessageDialog(a2,"兩次密碼輸入不一致"); break; } } printwrite.close(); }catch(FileNotFoundExceptione){ e.printStackTrace(); }catch(IOExceptione){ e.printStackTrace(); } } }); //實(shí)現(xiàn)修改密碼操作,并將用戶信息保存到文檔里 bt4.addActionListener(newActionListener(){ publicvoidactionPerformed(ActionEventae3){ //TODOAuto-generatedmethodstub a1.setVisible(true); a2.setVisible(false); } }); choice.addItemListener(newItemListener(){ publicvoiditemStateChanged(ItemEvente) { } }); bt5.addActionListener(newActionListener(){ publicvoidactionPerformed(ActionEventae4){ try{ if(cb.getState()){ oos.writeObject("私聊:"+text1.getText()+"對(duì):"+list.getSelectedItem()+":說(shuō)-:"+area2.getText()); }else{ oos.writeObject("群聊:"+text1.getText()+"說(shuō):"+area2.getText()); } area2.setText(""); }catch(IOExceptione){ e.printStackTrace(); } } });//設(shè)置聊天操作,實(shí)現(xiàn)獲取時(shí)間 bt6.addActionListener(newActionListener(){ publicvoidactionPerformed(ActionEventae5){ try{ oos.writeObject("該用戶下線:"+text1.getText()); System.exit(1); }catch(IOExceptione1){ e1.printStackTrace(); } } }); try{ socket=newSocket("localhost",9999);//設(shè)置服務(wù)器Ip oos=newObjectOutputStream(socket.getOutputStream()); ClientThreadct=newClientThread(); ct.start(); }catch(UnknownHostExceptione){ e.printStackTrace(); }catch(IOExceptione){ e.printStackTrace(); } } classClientThreadextendsThread{ publicvoidrun(){ try{ while(bool){ ois=newObjectInputStream(socket.getInputStream()); Strings=(String)ois.readObject(); String[]sarr=s.split(":"); area1.selectAll(); if(sarr[0].equals("列表")){ list.removeAll();list.add("在線用戶列表"); for(inti=1;i<sarr.length;i++){ list.add(sarr[i]); } }elseif(sarr[0].equals("私聊")){ SimpleDateFormatc=newSimpleDateFormat("yyyy/MM/ddHH:mm:ss"); area1.append(sarr[1]+""+sarr[2]+""+c.format(newDate())+":"+"\n"+""+sarr[3]+"\n"); }elseif(sarr[0].equals("群聊")){ SimpleDateFormatc=newSimpleDateFormat("yyyy/MM/ddHH:mm:ss"); area1.append(sarr[1]+""+c.format(newDate())+":"+"\n"+""+sarr[2]+"\n"); } } //實(shí)現(xiàn)聊天功能 }catch(IOExceptione){ e.printStackTrace(); }catch(ClassNotFoundExceptione){ e.printStackTrace(); } } } publicintcompare(Strings1,Strings2){ intflag=0; if(s1.equals(s2)==true){ flag=1; } returnflag; } publicstaticvoidmain(String[]args){ Chatlogoc=newChatlogo(); } }服務(wù)器主要代碼:importjava.io.*;import.*;importjava.util.*;publicclassServer{ ServerSocketssc; Socketsocket; booleanbool=true; ArrayListarray=newArrayList(); Mapmap=newHashMap(); publicServer(){ try{ ssc=newServerSocket(9999); while(bool){ socket=ssc.accept(); Strings=""+socket.getInetAddress()+":"+socket.getPort(); socket=ssc.accept(); array.add(socket); MyThreadmt=newMyThread(); mt.start(); } }catch(IOExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); }} classMyThreadextendsThread{ ObjectInputStreamois; ObjectOutputStreamoos; publicvoidrun(){ Strings=""; String[]sarr; try{ ois=newObjectInputStream(socket.getInputStream()); while((s=(String)ois.readObject())!=null){ sarr=s.split(":"); if(sarr[0].equals("賬號(hào)")){ map.put(sarr[1],socket); Iteratoriter=map.keySet().iterator(); Stringss=""; while(iter.hasNext()){ if(ss==null){ ss=iter.next()+":"; }else{ ss+=iter.next()+":"; } } for(inti=0;i<array.size();i++){ try{ oos=newObjectOutputStream(((Socket)array.get(i)).getOutputStream()); oos.writeObject("列表"+":"+ss); }catch(IOExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); } } }elseif(sarr[0].equals("該用戶下線")){ Socketsoc=(Socket)map.get(sarr[1]); map.remove(sarr[1]); array.remove(soc); Iteratoriter=map.keySet().iterator(); Stringss=""; while(iter.hasNext()){ if(ss==null){ ss=iter.next()+":"; }else{ ss+=iter.next()+":"; } } for(inti=0;i<array.size();i++){ try{ oos=newObjectOutputStream(((Socket)array.get(i)).getOutputStream()); oos.writeObject("列表:"+ss); }catch(IOExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); } } }elseif(sarr[0].equals("私聊")){ Socketsocke=(Socket)map.get(sarr[2]); oos=newObjectOutputStream(socke.getOutputStr

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論