網(wǎng)絡(luò)試驗6Socket編程實現(xiàn)閑聊程序_第1頁
網(wǎng)絡(luò)試驗6Socket編程實現(xiàn)閑聊程序_第2頁
網(wǎng)絡(luò)試驗6Socket編程實現(xiàn)閑聊程序_第3頁
網(wǎng)絡(luò)試驗6Socket編程實現(xiàn)閑聊程序_第4頁
網(wǎng)絡(luò)試驗6Socket編程實現(xiàn)閑聊程序_第5頁
已閱讀5頁,還剩2頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

本文格式為Word版,下載可任意編輯——網(wǎng)絡(luò)試驗6Socket編程實現(xiàn)閑聊程序

南昌航空大學(xué)試驗報告

課程名稱:計算機網(wǎng)絡(luò)試驗名稱:Socket編程實現(xiàn)閑聊程序班級:090451班學(xué)生姓名:楊望學(xué)號:09045131指導(dǎo)教師評定:簽名:

一、

試驗?zāi)康模?/p>

1、把握網(wǎng)絡(luò)應(yīng)用程序的開發(fā)方法;

2、把握Client/Server結(jié)構(gòu)軟件的設(shè)計與開發(fā)方法3、把握Socket機制的工作原理。

二、

試驗題目:

使用Win32Socket函數(shù)實現(xiàn)閑聊程序:能相互對發(fā)文本消息。

三、服務(wù)端與客戶端連接工作流程圖:

開始監(jiān)聽有新客戶端請求連接服務(wù)器不允許允許連接?提醒錯誤信息允許建立連接更新用戶信息

四、收發(fā)消息工作流程圖:

1

向客戶端B發(fā)送消息監(jiān)聽是用戶B在上線?是用戶B在繁忙?是用戶B在隱身?否發(fā)送給用戶B在離線?客戶端B發(fā)送給服務(wù)器

五、試驗代碼:1、服務(wù)器端:packageyuchen;

importjava.io.BufferedReader;importjava.io.IOException;

importjava.io.InputStreamReader;importjava.io.PrintStream;.ServerSocket;.Socket;

importjava.util.StringTokenizer;importjava.util.Vector;publicclassChatServer{staticintport=5566;//端口號staticVectorclients=newVector(10);//存儲連接客戶信息staticServerSocketserver=null;//建立服務(wù)器socketstaticSocketsocket=null;//套接字連接publicChatServer(){try{System.out.println(\server=newServerSocket(port);//初始化服務(wù)器套接字while(true){socket=server.accept();//等待連接System.out.println(socket.getInetAddress()+\連接\\n\得到客戶機地址Clientclient=newClient(socket);

2

clients.add(client);//增加客戶線程到向量中client.start();//啟動線程notifyChatRoom();//監(jiān)視閑聊室連接變化}}catch(Exceptionex){ex.printStackTrace();//輸出出錯信息}}publicstaticvoidnotifyChatRoom(){//監(jiān)視客戶端線程StringBuffernewUser=newStringBuffer(\for(inti=0;i0){//遍歷整個VectorClientclient=(Client)clients.firstElement();//得到一個客戶端try{client.socket.close();}catch(IOExceptionex){ex.printStackTrace();//輸出錯誤信息}clients.removeElement(client);//移出客戶端}}publicstaticvoiddisconnect(Clientc){//斷開客戶端try{System.err.println(c.ip+\斷開連接\\n\}catch(Exceptionex){ex.printStackTrace();}clients.removeElement(c);c.socket=null;}

publicstaticvoidmain(String[]args){newChatServer();}classClientextendsThread{Socketsocket;//連接端口Stringname;//用戶姓名Stringip;//客戶端ip地址BufferedReaderreader;//輸入流PrintStreamps;//輸出流publicClient(Sockets){socket=s;try{reader=newBufferedReader(newInputStreamReader(s.getInputStream()));ps=newPrintStream(s.getOutputStream());//得到輸出流Stringinfo=reader.readLine();//讀取接收到的信息StringTokenizerstinfo=newStringTokenizer(info,\分解字符串Stringhead=stinfo.nextToken();//獲取關(guān)鍵字System.out.println(stinfo.toString());System.out.println(head);

3

if(stinfo.hasMoreTokens()){name=stinfo.nextToken();//獲取用戶名}if(stinfo.hasMoreTokens()){ip=stinfo.nextToken();//獲取IP地址}}catch(IOExceptionex){ex.printStackTrace();}System.out.println(name);System.out.println(ip);}publicvoidsend(StringBuffermsg){ps.println(msg);//輸出信息ps.flush();}publicvoidrun(){while(true){Stringline=null;try{line=reader.readLine();System.out.println(\}catch(IOExceptionex){ex.printStackTrace();//輸出錯誤信息ChatServer.disconnect(this);//斷開連接ChatServer.notifyChatRoom();//更新信息return;}if(line==null){//客戶離開ChatServer.disconnect(this);ChatServer.notifyChatRoom();return;}StringTokenizerst=newStringTokenizer(line,\分解字符串Stringkeyword=st.nextToken();if(keyword.equals(\發(fā)送來的閑聊信息StringBuffermsg=newStringBuffer(\msg.append(name);//在信息上增加用戶名msg.append(st.nextToken(\ChatServer.sendClients(msg);//發(fā)送閑聊語句到各個客戶端System.out.println(msg);}elseif(keyword.equals(\退出命令ChatServer.disconnect(this);//斷開連接ChatServer.notifyChatRoom();//刷新信息}}}}}2、客戶端:packageyuchen;importjava.awt.BorderLayout;importjava.awt.Button;importjava.awt.Color;importjava.awt.Label;importjava.awt.TextArea;importjava.awt.TextField;

importjava.awt.event.ActionEvent;

4

importjava.awt.event.ActionListener;importjava.io.BufferedReader;importjava.io.IOException;

importjava.io.InputStreamReader;importjava.io.PrintStream;.InetAddress;.Socket;

importjava.util.StringTokenizer;importjavax.swing.JFrame;

importjavax.swing.JOptionPane;importjavax.swing.JPanel;

publicclassChatClientextendsJFrameimplementsActionListener,RunnableTextFieldtfName=newTextField(15);//姓名輸入文本域ButtonbtConnect=newButton(\連接\連接按鈕ButtonbtDisconnect=newButton(\斷開連接\斷開連接按鈕TextAreatfChat=newTextArea(8,27);//顯示閑聊信息文本域ButtonbtSend=newButton(\發(fā)送\TextFieldtfMessage=newTextField(30);//閑聊輸入java.awt.Listlist1=newjava.awt.List(9);//顯示在線用戶信息Socketsocket=null;//連接端口PrintStreamps=null;//輸出流Listenlisten=null;classListenextendsThread{BufferedReaderreader;PrintStreamps;Stringcname;Socketsocket;ChatClientchatClient;publicListen(ChatClientclient,Stringname,Socketsocket){try{this.chatClient=client;this.socket=socket;ame=name;reader=newBufferedReader(newInputStreamReader(socket.getInputStream()));ps=newPrintStream(socket.getOutputS

溫馨提示

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

評論

0/150

提交評論