版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、精選優(yōu)質(zhì)文檔-傾情為你奉上南昌航空大學(xué)實(shí)驗(yàn)報(bào)告 課程名稱: 計(jì)算機(jī)網(wǎng)絡(luò) 實(shí)驗(yàn)名稱: Socket編程實(shí)現(xiàn)聊天程序 班 級: 班 學(xué)生姓名: 楊 望 學(xué)號: 指導(dǎo)教師評定: 簽 名: 一、 實(shí)驗(yàn)?zāi)康模?、 掌握網(wǎng)絡(luò)應(yīng)用程序的開發(fā)方法;2、 掌握Client/ Server結(jié)構(gòu)軟件的設(shè)計(jì)與開發(fā)方法3、 掌握Socket機(jī)制的工作原理。二、 實(shí)驗(yàn)題目:使用Win32 Socket 函數(shù)實(shí)現(xiàn)聊天程序:能相互對發(fā)文本消息。三、 服務(wù)端與客戶端連接工作流程圖:開始監(jiān)聽有新客戶端請求連接服務(wù)器提示錯(cuò)誤信息不允許建立連接允許允許連接?更新用戶信息表四、收發(fā)消息工作流程圖: 監(jiān)聽發(fā)送給客戶端B是 用戶B在上線
2、?用戶B在忙碌 ? 用戶B在隱身 ?是是 用戶B在離線?發(fā)送給服務(wù)器否向客戶端B 發(fā)送消息五、 實(shí)驗(yàn)代碼:1、服務(wù)器端:package yuchen;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintStream;import .ServerSocket;import .Socket;import java.util.StringTokenizer;import java.util.Vector;public class Ch
3、atServer static int port = 5566;/端口號static Vector<Client> clients = new Vector<Client>(10);/存儲連接客戶信息static ServerSocket server = null; /建立服務(wù)器socketstatic Socket socket = null; /套接字連接public ChatServer() try System.out.println("Server start.");server = new ServerSocket(port); /初始
4、化服務(wù)器套接字while (true) socket = server.accept(); /等待連接System.out.println(socket.getInetAddress()+"連接n");/得到客戶機(jī)地址Client client = new Client(socket);clients.add(client);/增加客戶線程到向量中client.start();/啟動線程notifyChatRoom(); /監(jiān)視聊天室連接變化 catch (Exception ex) ex.printStackTrace();/輸出出錯(cuò)信息public static voi
5、d notifyChatRoom() /監(jiān)視客戶端線程StringBuffer newUser = new StringBuffer("newUser");for (int i = 0; i < clients.size(); i+) Client c = (Client)clients.elementAt(i);newUser.append(":"+); /客戶端姓名字符串sendClients(newUser);/發(fā)送信息到客戶端public static void sendClients(StringBuffer message)
6、 for (int i= 0 ; i < clients.size(); i+) Client client = (Client)clients.elementAt(i);/分別得到每個(gè)客戶端的連接client.send(message);/發(fā)送信息public void closeAll() /關(guān)閉所有連接while (clients.size() > 0 ) /遍歷整個(gè)VectorClient client = (Client) clients.firstElement(); /得到一個(gè)客戶端try client.socket.close(); catch(IOExceptio
7、n ex) ex.printStackTrace(); / 輸出錯(cuò)誤信息clients.removeElement(client); /移出客戶端public static void disconnect(Client c) / 斷開客戶端try System.err.println(c.ip+"斷開連接n"); catch (Exception ex) ex.printStackTrace();clients.removeElement(c);c.socket = null;public static void main(String args) new ChatServ
8、er();class Client extends Thread Socket socket;/連接端口String name ;/用戶姓名String ip; /客戶端ip地址BufferedReader reader;/輸入流PrintStream ps;/輸出流public Client(Socket s) socket = s;try reader = new BufferedReader(new InputStreamReader(s.getInputStream();ps = new PrintStream(s.getOutputStream();/得到輸出流String info
9、 = reader.readLine();/讀取接收到的信息StringTokenizer stinfo = new StringTokenizer(info,":"); /分解字符串String head = stinfo.nextToken(); /獲取關(guān)鍵字System.out.println(stinfo.toString();System.out.println(head);if (stinfo.hasMoreTokens()name = stinfo.nextToken() ;/獲取用戶名if (stinfo.hasMoreTokens() ip = stinf
10、o.nextToken(); /獲取IP地址 catch (IOException ex) ex.printStackTrace();System.out.println(name);System.out.println(ip);public void send (StringBuffer msg) ps.println(msg); /輸出信息ps.flush();public void run() while (true) String line = null;try line = reader.readLine();System.out.println("line:"+
11、line); catch (IOException ex) ex.printStackTrace(); /輸出錯(cuò)誤信息ChatServer.disconnect(this);/斷開連接ChatServer.notifyChatRoom();/更新信息return ;if (line = null) /客戶離開ChatServer.disconnect(this);ChatServer.notifyChatRoom();return ;StringTokenizer st = new StringTokenizer(line,":");/分解字符串String keyword
12、 = st.nextToken();if (keyword.equals("MSG") /發(fā)送來的聊天信息StringBuffer msg = new StringBuffer("MSG:");msg.append(name); /在信息上增加用戶名msg.append(st.nextToken("0n");ChatServer.sendClients(msg);/發(fā)送聊天語句到各個(gè)客戶端System.out.println(msg); else if (keyword.equals("quit") /退出命令Ch
13、atServer.disconnect(this); /斷開連接ChatServer.notifyChatRoom(); /刷新信息2、客戶端:package yuchen;import java.awt.BorderLayout;import java.awt.Button;import java.awt.Color;import java.awt.Label;import java.awt.TextArea;import java.awt.TextField;import java.awt.event.ActionEvent;import java.awt.event.ActionList
14、ener;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintStream;import .InetAddress;import .Socket;import java.util.StringTokenizer;import javax.swing.JFrame;import javax.swing.JOptionPane;import javax.swing.JPanel;public class ChatClient ext
15、ends JFrame implements ActionListener ,RunnableTextField tfName = new TextField(15);/姓名輸入文本域Button btConnect = new Button("連接");/連接按鈕Button btDisconnect = new Button("斷開連接");/斷開連接按鈕TextArea tfChat = new TextArea(8,27);/顯示聊天信息文本域Button btSend = new Button("發(fā)送");TextField
16、 tfMessage = new TextField(30);/聊天輸入java.awt.List list1 = new java.awt.List(9);/顯示在線用戶信息 Socket socket = null;/連接端口PrintStream ps = null;/輸出流Listen listen = null;class Listen extends Thread BufferedReader reader;PrintStream ps;String cname;Socket socket;ChatClient chatClient;public Listen(ChatClient
17、 client,String name,Socket socket) try this.chatClient = client; this.socket = socket; ame = name; reader = new BufferedReader(new InputStreamReader(socket.getInputStream(); ps = new PrintStream(socket.getOutputStream(); catch (IOException e) e.printStackTrace();public void run() while (true) String
18、 line=null ;try line = reader.readLine(); /讀取數(shù)據(jù)流System.out.println("客戶端:"+line);catch (IOException ex) ex.printStackTrace();ps.println("quit"); /斷開連接return;StringTokenizer stinfo = new StringTokenizer(line,":"); /分解字符串String keyword = stinfo.nextToken();if (keyword.equa
19、ls("MSG") chatClient.tfChat.append(line+"n");else if (keyword.equals("newUser")chatClient.list1.clear();chatClient.list1.add("users", 0);int i = 1;while (stinfo.hasMoreTokens() chatClient.list1.add(stinfo.nextToken(), i+); public void actionPerformed(ActionEve
20、nt e) tryif(e.getSource()=btConnect) /點(diǎn)擊連接按鈕if (socket = null) socket = new Socket(InetAddress.getLocalHost(),5566);ps = new PrintStream(socket.getOutputStream();/獲取輸出流,寫入信息StringBuffer info = new StringBuffer("info:");String userinfo = tfName.getText()+":"+InetAddress.getLocalHo
21、st().toString();ps.println(info.append(userinfo);/輸出信息ps.flush();listen = new Listen(this,tfName.getText(),socket);listen.start(); else if (e.getSource() = btDisconnect) /點(diǎn)擊斷開連接按鈕disconnect(); else if (e.getSource() = btSend) /點(diǎn)擊發(fā)送按鈕if (socket != null) StringBuffer msg = new StringBuffer("MSG:&
22、quot;);String msgtxt = new String(tfMessage.getText();ps.println(msg.append(msgtxt);/發(fā)送信息ps.flush(); else JOptionPane.showMessageDialog(this, "請先連接!", "提示", 1); catch (Exception ex) ex.printStackTrace();/輸出錯(cuò)誤信息public void disconnect() /斷開連接方法if (socket != null) ps.println("quit");/發(fā)送信息ps.flush();socket = null;tfName.setText("");public ChatClient(Socket socket) this.setLayout(new BorderLayout();JPanel panel1 = new JPanel();Label label = new Label("姓名");panel1.setBackground(Color.orange);panel1.add(label);panel1.add(tfName);panel1.ad
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年教育機(jī)構(gòu)校長聘用合同書3篇
- 2024版勞務(wù)派遣就業(yè)合同范本
- 二零二四南京個(gè)人租賃房屋租賃合同租賃物交付驗(yàn)收合同3篇
- 年度Β-內(nèi)酰胺類抗菌藥物產(chǎn)業(yè)分析報(bào)告
- 年度高檔生物顯微鏡競爭策略分析報(bào)告
- 年度大孔燒結(jié)空心磚競爭策略分析報(bào)告
- 2025年西瓜種植與農(nóng)業(yè)科技園區(qū)建設(shè)合作合同范本3篇
- 金屬材料及工藝技術(shù)創(chuàng)新研究報(bào)告
- 2025年度淋浴房淋浴房頂安裝合同4篇
- 二零二四年?;费哼\(yùn)員安全管理責(zé)任書與考核合同3篇
- 寒潮雨雪應(yīng)急預(yù)案范文(2篇)
- DB33T 2570-2023 營商環(huán)境無感監(jiān)測規(guī)范 指標(biāo)體系
- 上海市2024年中考英語試題及答案
- 房屋市政工程生產(chǎn)安全重大事故隱患判定標(biāo)準(zhǔn)(2024版)宣傳海報(bào)
- 垃圾車駕駛員聘用合同
- 2025年道路運(yùn)輸企業(yè)客運(yùn)駕駛員安全教育培訓(xùn)計(jì)劃
- 南京工業(yè)大學(xué)浦江學(xué)院《線性代數(shù)(理工)》2022-2023學(xué)年第一學(xué)期期末試卷
- 2024版機(jī)床維護(hù)保養(yǎng)服務(wù)合同3篇
- 《論拒不執(zhí)行判決、裁定罪“執(zhí)行能力”之認(rèn)定》
- 工程融資分紅合同范例
- 2024國家安全員資格考試題庫加解析答案
評論
0/150
提交評論