版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、網(wǎng)絡(luò)與通信課程實驗報告實驗2:Socket通信編程姓名院系計算機(jī)學(xué)院學(xué)號任課教師錢權(quán)指導(dǎo)教師錢權(quán)實驗地點(diǎn)計算機(jī)樓706機(jī)房實驗時間2016年9月13日實驗課表現(xiàn)出勤、表現(xiàn)得分(10)實驗報告得分(40)實驗總分操作結(jié)果得分(50)實驗?zāi)康模?. 掌握Socket編程過程;2. 編寫簡單的網(wǎng)絡(luò)應(yīng)用程序。實驗內(nèi)容:利用您選擇的任何一個編程語言,分別基于TCP與UDP編寫一個簡單的 Client/Server網(wǎng)絡(luò)應(yīng)用程序。具體程序要求參見實驗指導(dǎo)書。要求以附件形式給出:系統(tǒng)概述:運(yùn)行環(huán)境、編譯、使用方法、實現(xiàn)環(huán)境、程序文件列表等;主要數(shù)據(jù)結(jié)構(gòu);主要算法描述;用戶使用手冊; 程序源代碼;實驗要求:(學(xué)
2、生對預(yù)習(xí)要求的回答)(10分)得分:Socket編程客戶端的主要步驟1)搜尋就是否有服務(wù)端,無論就是否收到都返回相關(guān)的一個消息。2)獲得服務(wù)器端的10流3)用處理流封裝后與客戶端交互,原則4)關(guān)閉 10 流,socket。Socket編程服務(wù)器端的主要步驟1)打開服務(wù)器端,等待客戶端的連接2)如果連接成功返回一個消息,不成功則返回失敗的消息3)獲得服務(wù)器端的IO流4)用處理流封裝后與客戶端交互,5)關(guān)閉客戶端,關(guān)閉服務(wù)器。實驗過程中遇到的問題如何解決的?(10分)得分:問題1:怎樣制作界面?因為我使用的就是java語言,所以我采用了 java的GUI程序里面的JFrame來構(gòu)造窗體 界面 與控
3、件。問題2:服務(wù)器端程序如何根據(jù)收到的信息選擇轉(zhuǎn)發(fā)的目的地?答:服務(wù)器在收到信息后,根據(jù)特殊字符的前面加上目的地用戶名用特殊字符將信息實體分 開,獲得目的地用戶名。 然后在記錄所有用戶信息的數(shù)組中,匹配該用戶名,找到返回該用戶的套接字指針,服務(wù)器根據(jù)該指針轉(zhuǎn)發(fā)信息,若找不到,出現(xiàn)錯誤,返回錯誤標(biāo)識。問題3:整個Socket編程中遇到的許多異常怎么處理?實驗中碰到了很多異常,就是與Socket資源釋放有關(guān)的,比如說我給的一個客戶端線程,但改客戶端關(guān)閉掉了,而我并沒有在容器中進(jìn)行remove該線程操作,那么由于該客戶端線程繼續(xù)在工作,所以會報 java、net、SocketException 錯誤
4、 server 無法 msg = in、readUTF();無法讀取到輸入流的信息。解決方法其實也就就是將該關(guān)閉的線程做remove操作。我可以加一個判斷客戶端線程就是否已死的線程,如果死了,就remove掉。本次實驗的體會(結(jié)論)(10分)得分:本次實驗感覺較難,但就是真正上手后覺得一旦做出一些東西,就有動力去繼續(xù)往下做由于最近比較青睞java的原因,所以選擇了 java來編寫這個程序,在充分的學(xué)習(xí)后終于讓客戶 端與服務(wù)端能夠通信,但就是想做出一個界面,所以又自學(xué)了 JFrame方面的內(nèi)容,搞出來一個 界面。思考題:(10分)思考題1:(4分)|得分:您所用的編程語言在Socket通信中用到
5、的主要類及其主要作用。1、DatalnputStream;:數(shù)據(jù)輸入流允許應(yīng)用程序以與機(jī)器無關(guān)方式從底層輸入流中讀取基本Java數(shù)據(jù)類型。應(yīng)用程序可以使用數(shù)據(jù)輸出流寫入稍后由數(shù)據(jù)輸入流讀取的數(shù)據(jù)。DataOutputStream;:數(shù)據(jù)輸出流允許應(yīng)用程序以適當(dāng)方式將基本Java數(shù)據(jù)類型寫入輸出流中。然后,應(yīng)用程序可以使用數(shù)據(jù)輸入流將數(shù)據(jù)讀入2、 socket類:用于服務(wù)器端程序與客戶端程序,實現(xiàn)雙方的數(shù)據(jù)通信。得分:思考題2:(6分)說明TCP與UDP編程的主要差異與特點(diǎn)。(1) TCP(Transmission Control Protocol,傳輸控制協(xié)議) UDP(User Data P
6、rotocol,用戶數(shù)據(jù)報協(xié)議)(2) 最主要區(qū)別-傳輸可靠性,TCP可靠而UDP不可靠。真正交由網(wǎng)路傳送的 IP封包就是有 一定的體積限制的(IP封包的最大體積為 65536 bytes )。由于UDP不需要可靠傳輸,因此 相較于TCP來說,一大堆必需占據(jù)封包表頭的 over head都可省略,從而換取更大的 payroll 空間。 這樣的結(jié)果,將令到單一的IP封包在作 UDP連線時所攜載的資料要比 TCP連線 多更多。這就是靠犧牲可靠性而換取得來的(3) TCP提供的就是一個連線導(dǎo)向 (Connection Oriented)的可靠傳輸,而 UDP則就是一個非 連線型(Connection
7、less)的非可靠傳輸。應(yīng)用場合,對于某些訊息量較大、時效性大于可靠性的傳輸來說(比方說語音/影像),UDP的確就是個不錯的選擇。(5)從速度上說,UDP比TCP快,UDP不需要運(yùn)用確認(rèn)機(jī)制來保證資料就是否正確的被接 收、不需要重傳遺失的資料、資料的接收可不必按順序進(jìn)行、也不提供回傳機(jī)制來控制資料流的速度。指導(dǎo)教師評語日期:附件1:1、 運(yùn)行環(huán)境:win7 ,win8,win 10等操作系統(tǒng)。2、編譯:通過Eclipse編譯,無任何錯誤警告。3、實現(xiàn)環(huán)境:Eclipse附件2:使用方法:1、打開服務(wù)端。2、打開客戶端。3、在兩個端口都可以發(fā)送消息給另一個端口。4、關(guān)閉兩個端口。(如圖所示)TH
8、客戶黛 請輸入您要發(fā)送的涓息Z 挪務(wù)器請求槌接已連接到胭務(wù)器,可以開始岌送消息雷輪德I O |回請輸入您要發(fā)送的消息帕勞器已正式啟動 啟動時間:S£ Oct22 10:5535 CST 2016等待客戶端連接容戶端已經(jīng)連接芨送的消息:老師你好!清輸入短要岌這的消息慨勢器已正式啟動 啟動時間:Sat Oct 22 10:5535 CST 2016 等待容戶塢連接容戶端已經(jīng)連接發(fā)送的消息:老師你好!茗戶端127.0 0/1;個.0.01丈來1肖息:同學(xué)好!附件 3: 程序文件列表 1、服務(wù)端代碼 package cn 、 MyNET;import java、 io 、 *;import
9、java、 net 、*;import java、util 、 *;import java、awt 、*;import java、awt 、event 、ActionEvent;import java、awt 、event 、ActionListener;import javax、 swing 、 *;import java、awt 、*;import javax、 swing 、 *;public class Server extends JFrame/*/private static final long serialVersionUID = / 輸入消息框private JTextFie
10、ld jtf = new JTextField();/ 顯示框private JTextArea jta = new JTextArea();/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(ne
11、w BorderLayout(); / 設(shè)置格式布局、 WEST);設(shè)置對齊方式p、 add(new JLabel(" 請輸入您要發(fā)送的消息 "), BorderLayoutp 、 add(jtf, BorderLayout 、 CENTER);jtf、 setHorizontalAlignment(JTextField、 RIGHT); /、 CENTER);setLayout(new BorderLayout(); add(p, BorderLayout 、 NORTH); add(new JScrollPane(jta), BorderLayoutsetTitle(&
12、quot; 服務(wù)端 ");setSize(500, 300);setDefaultCloseOperation(JFrame、 EXIT_ON_CLOSE);setVisible(true); / 使可視化組建可見try jta、 append(" 服務(wù)器已正式啟動啟動時間 :" + new Date() +'n');jta、 append(" 等待客戶端連接 "+'n');/ 監(jiān)聽連接請求、 accept();、 getInputStream();、 getOutputStream();SuppressWarn
13、ings("resource")Socket socket = new ServerSocket(8888) /IO 流 inputFromClient = new DataInputStream(socket outputToClient = new DataOutputStream(socket/ 獲取客戶端的名稱 與 IP、 getInetAddress();、 getHostName();、 getHostAddress();"+'n');jta、 append(" 客戶端已經(jīng)連接InetAddress inetAddress =
14、 socket String clientName = inetAddress String clientIP = inetAddresswhile(true)+ "發(fā)來消息 :String fromClient = inputFromClient、 readUTF();jta、 append(" 客戶端 " + clientName + " " + clientIP"+fromClient); catch (IOException e) jta 、 append(" 客戶端已斷開連接 "+'n')
15、; private class TextFieldListener implements ActionListenerOverridepublic void actionPerformed(ActionEvent e) try outputToClient 、 writeUTF(jtf 、 getText() 、 trim() + 'n'); / 向服務(wù)器發(fā)送消息jta、 append(" 發(fā)送的消息 :" + jtf 、 getText() 、 trim() +'n');jtf、 setText("");/ 輸出后清空輸
16、入框 catch (IOException e1) System 、 err 、 println(e1);2、客戶端代碼 : package cn 、 MyNET;import java、awt 、BorderLayout;import java、awt 、Container;import java、awt 、Font;import java、awt 、event 、ActionEvent;import java、awt 、event 、ActionListener;import java、 io 、 DataInputStream;import java、 io 、 DataOutputSt
17、ream;import java、 io 、 IOException;import java、 net 、Socket;import java、text 、 SimpleDateFormat;import java、util 、 Calendar;import javax、 swing 、 JFrame;import javax、 swing 、 JLabel;import javax、 swing 、 JPanel;import javax、 swing 、 JScrollPane;import javax、 swing 、 JTextArea;import javax、 swing 、 J
18、TextField;public class Client extends JFrame /*/private static final long serialVersionUID = 24810448L; / 輸入消息框private JTextField jtf = new JTextField();/ 顯示區(qū)域 private JTextArea jta = new JTextArea();/IO 流 private DataOutputStream toServer; private DataInputStream fromServer;public static void main(
19、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(JTextField、 RIGHT); / 設(shè)置對齊方式setLayout(new BorderLayout();add(p
20、, BorderLayout、 NORTH);add(new JScrollPane(jta), BorderLayout 、 CENTER);jtf 、 addActionListener(new TextFieldListener(); /設(shè)置偵聽器接口setTitle(" 客戶端 ");setSize(500, 300);setDefaultCloseOperation(JFrame、 EXIT_ON_CLOSE);setVisible(true); / 使可視化組建可見try jta 、 append(" 向服務(wù)器請求鏈接 "+'n');SuppressWarnings("resource")Socket socket = new Socket("localhost", 8888);fromServer = new DataInputStream(socket、 getInputStream();toServer = new DataOutputStream(socket、 getOutputStream();jta、 append(" 已連接到服務(wù)器 , 可以開始發(fā)送消息 &quo
溫馨提示
- 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025【合同范本】最簡單雇傭合同范本
- 2025醫(yī)院水電工聘用合同
- 課題申報參考:六朝裝飾圖案研究
- 課題申報參考:客家文化中的時空分析研究
- 2024年現(xiàn)場總線智能儀表項目資金需求報告代可行性研究報告
- 藥品包裝設(shè)計與安全用藥的關(guān)聯(lián)性研究
- 2024年電動助力轉(zhuǎn)向裝置項目資金籌措計劃書代可行性研究報告
- 2024年直聯(lián)式真空泵項目投資申請報告代可行性研究報告
- 自然、舒適與健康-家居中如何挑選綠色地板
- 跨領(lǐng)域合作與創(chuàng)新思維的培養(yǎng)
- 2024年社區(qū)警務(wù)規(guī)范考試題庫
- 2024年食用牛脂項目可行性研究報告
- 2024-2030年中國戶外音箱行業(yè)市場發(fā)展趨勢與前景展望戰(zhàn)略分析報告
- GB/T 30306-2024家用和類似用途飲用水處理濾芯
- 家務(wù)分工與責(zé)任保證書
- 消防安全隱患等級
- 溫室氣體(二氧化碳和甲烷)走航監(jiān)測技術(shù)規(guī)范
- 2023山東春季高考數(shù)學(xué)真題(含答案)
- 為加入燒火佬協(xié)會致辭(7篇)
- 職業(yè)衛(wèi)生法律法規(guī)和標(biāo)準(zhǔn)培訓(xùn)課件
- 高二下學(xué)期英語閱讀提升練習(xí)(二)
評論
0/150
提交評論