




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、-. z.網(wǎng)絡(luò)與通信課程實驗報告實驗2:Socket通信編程院系計算機學(xué)院*任課教師錢權(quán)指導(dǎo)教師錢權(quán)實驗地點計算機樓706機房實驗時間2016年9月13日實驗課表現(xiàn)出勤、表現(xiàn)得分(10)實驗報告得分(40)實驗總分操作結(jié)果得分(50)實驗?zāi)康模赫莆誗ocket編程過程;編寫簡單的網(wǎng)絡(luò)應(yīng)用程序。實驗內(nèi)容:利用你選擇的任何一個編程語言,分別基于TCP 和UDP 編寫一個簡單的Client/Server 網(wǎng)絡(luò)應(yīng)用程序。具體程序要求參見實驗指導(dǎo)書。要求以附件形式給出:系統(tǒng)概述:運行環(huán)境、編譯、使用方法、實現(xiàn)環(huán)境、程序文件列表等;主要數(shù)據(jù)構(gòu)造;主要算法描述; 用戶使用手冊;程序源代碼;實驗要求:學(xué)生對預(yù)
2、習(xí)要求的答復(fù)10分得分:Socket編程客戶端的主要步驟1)搜尋是否有效勞端,無論是否收到都返回相關(guān)的一個消息。2)獲得效勞器端的IO流3)用處理流封裝后與客戶端交互,原則4)關(guān)閉IO流,socket。Socket編程效勞器端的主要步驟1)翻開效勞器端,等待客戶端的連接2) 如果連接成功返回一個消息,不成功則返回失敗的消息3)獲得效勞器端的IO流4)用處理流封裝后與客戶端交互,5)關(guān)閉客戶端,關(guān)閉效勞器。實驗過程中遇到的問題如何解決的?10分得分:問題1:怎樣制作界面?因為我使用的是java語言,所以我采用了java的GUI程序里面的JFrame來構(gòu)造窗體,界面和控件。問題2:效勞器端程序如何
3、根據(jù)收到的信息選擇轉(zhuǎn)發(fā)的目的地?答:效勞器在收到信息后,根據(jù)特殊字符的前面加上目的地用戶名用特殊字符將信息實體分開,獲得目的地用戶名。然后在記錄所有用戶信息的數(shù)組中,匹配該用戶名,找到返回該用戶的套接字指針,效勞器根據(jù)該指針轉(zhuǎn)發(fā)信息,假設(shè)找不到,出現(xiàn)錯誤,返回錯誤標識。問題3:整個 Socket 編程中遇到的許多異常怎么處理?實驗中碰到了很多異常,是與 Socket 資源釋放有關(guān)的,比方說我給的一個客戶端線程,但改客戶端關(guān)閉掉了,而我并沒有在容器中進展 remove 該線程操作,則由于該客戶端線程繼續(xù)在工作,所以會報.SocketE*ception 錯誤,server 無法msg = in.r
4、eadUTF();無法讀取到輸入流的信息。解決方法其實也就是將該關(guān)閉的線程做 remove 操作。我可以加一個判斷客戶端線程是否已死的線程,如果死了,就 remove 掉。本次實驗的體會結(jié)論10分得分: 本次實驗感覺較難,但是真正上手后覺得一旦做出一些東西,就有動力去繼續(xù)往下做,由于最近比擬青睞java的原因,所以選擇了java來編寫這個程序,在充分的學(xué)習(xí)后終于讓客戶端和效勞端能夠通信,但是想做出一個界面,所以又自學(xué)了JFrame方面的內(nèi)容,搞出來一個界面。思考題:10分思考題1:4分得分:你所用的編程語言在Socket通信中用到的主要類及其主要作用。1、DataInputStream;:數(shù)據(jù)
5、輸入流允許應(yīng)用程序以與機器無關(guān)方式從底層輸入流中讀取根本 Java 數(shù)據(jù)類型。應(yīng)用程序可以使用數(shù)據(jù)輸出流寫入稍后由數(shù)據(jù)輸入流讀取的數(shù)據(jù)。DataOutputStream;:數(shù)據(jù)輸出流允許應(yīng)用程序以適當方式將根本 Java 數(shù)據(jù)類型寫入輸出流中。然后,應(yīng)用程序可以使用數(shù)據(jù)輸入流將數(shù)據(jù)讀入2、socket 類:用于效勞器端程序和客戶端程序,實現(xiàn)雙方的數(shù)據(jù)通信。思考題2:6分得分:說明TCP和UDP編程的主要差異和特點。1TCPTransmission Control Protocol,傳輸控制協(xié)議)UDPUser Data Protocol,用戶數(shù)據(jù)報協(xié)議2最主要區(qū)別-傳輸可靠性,TCP 可靠而
6、UDP 不可靠。真正交由網(wǎng)路傳送的 IP 封包是有一定的體積限制的( IP 封包的最大體積為 65536 bytes )。 由于 UDP 不需要可靠傳輸,因此相較于 TCP 來說,一大堆必需占據(jù)封包表頭的 over head 都可省略,從而換取更大的 payroll 空間。 這樣的結(jié)果,將令到單一的 IP 封包在作 UDP 連線時所攜載的資料要比 TCP 連線多更多。 這是靠犧牲可靠性而換取得來的3TCP 提供的是一個連線導(dǎo)向(Connection Oriented)的可靠傳輸而 UDP 則是一個非連線型(Connectionless)的非可靠傳輸。4應(yīng)用場合,對于*些訊息量較大、時效性大于可
7、靠性的傳輸來說(比方說語音/影像), UDP 確實是個不錯的選擇。5從速度上說,UDP 比 TCP 快,UDP 不需要運用確認機制來保證資料是否正確的被接收、不需要重傳遺失的資料、資料的接收可不必按順序進展、也不提供回傳機制來控制資料流的速度。指導(dǎo)教師評語:日期: 附件1:1.運行環(huán)境: win7 ,win8,win10等操作系統(tǒng)。2.編譯:通過Eclipse編譯,無任何錯誤警告。3.實現(xiàn)環(huán)境:Eclipse附件2:使用方法:1.翻開效勞端。2.翻開客戶端。3.在兩個端口都可以發(fā)送消息給另一個端口。4.關(guān)閉兩個端口。如下圖附件3:程序文件列表:1.效勞端代碼:package.MyNET;imp
8、ort java.io.*;import .*;import java.util.*;import java.awt.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java*.swing.*;import java.awt.*;import java*.swing.*;public class Server e*tends JFrame /* * */private static final long serialVersionUID = 45L;/輸入消息框 private JT
9、e*tField jtf = new JTe*tField(); /顯示框 private JTe*tArea jta = new JTe*tArea(); /IO流 private DataInputStream inputFromClient; private DataOutputStream outputToClient; SuppressWarnings(unused) public static void main(String args) new Server(); public Server() JPanel p = new JPanel(); p.setLayout(new B
10、orderLayout(); /設(shè)置格式布局 p.add(new JLabel(請輸入您要發(fā)送的消息), BorderLayout.WEST); p.add(jtf, BorderLayout.CENTER); jtf.setHorizontalAlignment(JTe*tField.RIGHT); /設(shè)置對齊方式 setLayout(new BorderLayout(); add(p, BorderLayout.NORTH); add(new JScrollPane(jta), BorderLayout.CENTER); jtf.addActionListener(new Te*tFiel
11、dListener(); /設(shè)置偵聽器接口 setTitle(效勞端); setSize(500, 300); setDefaultCloseOperation(JFrame.E*IT_ON_CLOSE); setVisible(true); /使可視化組建可見 try jta.append(效勞器已正式啟動 啟動時間: + new Date() +n); jta.append(等待客戶端連接+n); /監(jiān)聽連接請求 SuppressWarnings(resource)Socket socket = new ServerSocket(8888).accept(); /IO流 inputFrom
12、Client = new DataInputStream(socket.getInputStream(); outputToClient = new DataOutputStream(socket.getOutputStream(); /獲取客戶端的名稱 和 IP InetAddress inetAddress = socket.getInetAddress(); String clientName = inetAddress.getHostName(); String clientIP = inetAddress.getHostAddress(); jta.append(客戶端已經(jīng)連接+n)
13、; while(true) String fromClient = inputFromClient.readUTF(); jta.append(客戶端 + clientName + ; + clientIP + 發(fā)來消息: +fromClient); catch (IOE*ception e) jta.append(客戶端已斷開連接+n); private class Te*tFieldListener implements ActionListener Override public void actionPerformed(ActionEvent e) try outputToClient
14、.writeUTF(jtf.getTe*t().trim() + n); /向效勞器發(fā)送消息 jta.append(發(fā)送的消息: + jtf.getTe*t().trim() +n); jtf.setTe*t(); /輸出后清空輸入框 catch (IOE*ception e1) System.err.println(e1); 2.客戶端代碼:package.MyNET;import java.awt.BorderLayout;import java.awt.Container;import java.awt.Font;import java.awt.event.ActionEvent;imp
15、ort java.awt.event.ActionListener;import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.IOE*ception;import .Socket;import java.te*t.SimpleDateFormat;import java.util.Calendar;import java*.swing.JFrame;import java*.swing.JLabel;import java*.swing.JPanel;import java*.swing.JScr
16、ollPane;import java*.swing.JTe*tArea;import java*.swing.JTe*tField;public class Client e*tends JFrame /* * */private static final long serialVersionUID = 48L;/輸入消息框 private JTe*tField jtf = new JTe*tField(); /顯示區(qū)域 private JTe*tArea jta = new JTe*tArea(); /IO流 private DataOutputStream toServer; priva
17、te DataInputStream fromServer; public static void main(String args) new Client(); public Client() JPanel p = new JPanel(); p.setLayout(new BorderLayout(); /設(shè)置格式布局 p.add(new JLabel(請輸入您要發(fā)送的消息), BorderLayout.WEST); p.add(jtf, BorderLayout.CENTER); jtf.setHorizontalAlignment(JTe*tField.RIGHT); /設(shè)置對齊方式
18、setLayout(new BorderLayout(); add(p, BorderLayout.NORTH); add(new JScrollPane(jta), BorderLayout.CENTER); jtf.addActionListener(new Te*tFieldListener(); /設(shè)置偵聽器接口 setTitle(客戶端); setSize(500, 300); setDefaultCloseOperation(JFrame.E*IT_ON_CLOSE); setVisible(true); /使可視化組建可見 try jta.append(向效勞器請求+n); SuppressWarnings(resource)Socket socket = new Socket(localhost, 8888); fromServer = new DataInputStream(socket.getInputStream(); toServer = new DataOutputStream(socket.ge
溫馨提示
- 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)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 砂漿抹面施工方案
- 柱亞克力燈箱施工方案
- 展廳裝飾裝修承包合同
- 管道除銹施工方案
- 4米高圍擋施工方案
- 手球館地坪施工方案
- 房屋粉刷安裝施工方案
- 堤壩護坡混凝土施工方案
- 反光漆施工方案
- 填筑施工方案
- 高級中學(xué)語文教師資格考試學(xué)科知識與教學(xué)能力2024年下半年測試試題及解答
- 江蘇省常州市溧陽市2023-2024學(xué)年八年級下學(xué)期期末道德與法治試題(含答案解析)
- 承包合同文件
- JT-T-1094-2016營運客車安全技術(shù)條件
- 擊鼓傳花懲罰游戲20題(課堂)
- 2024 smart社區(qū)運營全案服務(wù)項目
- QB/T 8020-2024 冷凍飲品 冰棍(正式版)
- 神經(jīng)外科顱內(nèi)動脈瘤血管內(nèi)介入栓塞治療手術(shù)知情同意書
- 小學(xué)數(shù)學(xué)主題活動設(shè)計一年級《歡樂購物街》
- 2024年廣州市高三一模高考物理試卷試題答案(精校打印)
- 2024屆江蘇省蘇州吳中區(qū)五校聯(lián)考八年級物理第二學(xué)期期末統(tǒng)考試題含解析
評論
0/150
提交評論