計算機網(wǎng)絡(luò)實驗 Socket消息傳輸程序的實現(xiàn)_第1頁
計算機網(wǎng)絡(luò)實驗 Socket消息傳輸程序的實現(xiàn)_第2頁
計算機網(wǎng)絡(luò)實驗 Socket消息傳輸程序的實現(xiàn)_第3頁
計算機網(wǎng)絡(luò)實驗 Socket消息傳輸程序的實現(xiàn)_第4頁
計算機網(wǎng)絡(luò)實驗 Socket消息傳輸程序的實現(xiàn)_第5頁
已閱讀5頁,還剩10頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、河南科技大學(xué)計算機網(wǎng)絡(luò)A實驗報告信息工程學(xué)院物聯(lián)網(wǎng)183實驗五Socket消息傳輸程序的實現(xiàn)一、實驗?zāi)康?、學(xué)習(xí)掌握高級語言Socket編程的方法。2、掌握TCP/IP協(xié)議,了解套接字等概念。3、針對具體的應(yīng)用要求(實時傳輸數(shù)據(jù)/文件/圖像/聊天室),編程實現(xiàn)。二、實驗原理1、網(wǎng)絡(luò)編程的基本模型就是客戶機到服務(wù)器模型,簡單的說就是兩個進(jìn)程 之間相互通訊,然后其中一個必須提供一個固定的位置,而另一個則只需要知道 這個固定的位置。并去建立兩者之間的聯(lián)系,然后完成數(shù)據(jù)的通訊就可以了,這 里提供固定位置的通常稱為服務(wù)器,而建立聯(lián)系的通常叫做客戶端,基于這個簡 單的模型,就可以進(jìn)入網(wǎng)絡(luò)編程。2、客戶機/

2、服務(wù)器模型是一個應(yīng)用程序開發(fā)框架,該框架是為了將數(shù)據(jù)的表 示與其內(nèi)部的處理和存儲分離開來而設(shè)計的。客戶機請求服務(wù),服務(wù)器為這些請 求服務(wù)。請求通過網(wǎng)絡(luò)從客戶機傳遞到服務(wù)器。服務(wù)器所進(jìn)行的處理對客戶機而 言是隱藏的。一個服務(wù)器可以為客戶機服務(wù)。3、一個服務(wù)器可以同時和多臺客戶機進(jìn)行通訊。三、實驗條件軟件環(huán)境:windows操作系統(tǒng),VC+ 6.0編程軟件。硬件環(huán)境:1臺計算機。四、實驗學(xué)時2學(xué)時五、實驗時間第十四周周二19:00-21:00六、實驗地點工科2軟件一機房和軟件二機房七、實驗內(nèi)容與完成情況實驗內(nèi)容(1)掌握TCP原理。(2)用套接字(Socket)編程實現(xiàn)網(wǎng)絡(luò)文字傳輸。完成情況usi

3、ng System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Net;using System.Net.Sockets;using System.Text;using System.Threading;using System.Threading.Tasks;using System.Windows.Forms;namespace jiwangpublic partial cl

4、ass Form1 : Formpublic Form1 ()InitializeComponent();Thread threadWatch = null;Socket socketWatch = null;private void Form1_Load(object sender, EventArgs e)private void textBox1_TextChanged(object sender, EventArgs e) private void btnServerConn_Click(object sender, EventArgs e) trysocketWatch = new

5、Socket(AddressFamily.InterNetwork,SocketType.Stream, ProtocolType.Tcp)IPAddress ipaddress = IPAddress.Parse(this.txtIP.Text.Trim();IPEndPoint endpoint = new IPEndPoint(ipaddress, int.Parse(this.txtPort.Text.Trim();socketWatch.Bind(endpoint);socketWatch.Listen(20);threadWatch = new Thread(WatchConnec

6、ting) threadWatch.IsBackground = true; threadWatch.Start();txtMsg.AppendText(開始監(jiān)聽客戶端傳來的信息! + rn); this.btnServerConn.Enabled = false;catch (Exception ex)txtMsg.AppendText( 服務(wù)端啟動服務(wù)失敗! + rn); this.btnServerConn.Enabled = true;Socket socConnection = null;/ /監(jiān)聽客戶端發(fā)來的請求/ private void WatchConnecting()whi

7、le (true)socConnection = socketWatch.Accept();txtMsg.AppendText(客戶端連接成功! + rn);ParameterizedThreadStart pts = new ParameterizedThreadStart(ServerRecMsg);Thread thr = new Thread(pts);thr.IsBackground = true;thr.Start(socConnection);/ /發(fā)送信息到客戶端的方法/ / 發(fā)送的字符串信息private void ServerSendMsg(string sendMsg)t

8、rybyte arrSendMsg = Encoding.UTF8.GetBytes(sendMsg);socConnection.Send(arrSendMsg);txtMsg.AppendText( 服務(wù)器+ GetCurrentTime() + rn + sendMsg+ rn);catch (Exception ex)txtMsg.AppendText(客戶端已斷開連接,無法發(fā)送信息! + rn);/ /接收客戶端發(fā)來的信息/ / 客戶端套接字對象private void ServerRecMsg(object socketClientPara)Socket socketServer

9、= socketClientPara as Socket;while (true)byte arrServerRecMsg = new byte1024 * 1024;tryint length = socketServer.Receive(arrServerRecMsg);string strSRecMsg = Encoding.UTF8.GetString(arrServerRecMsg,0, length);txtMsg.AppendText (天涯+ GetCurrentTime() + rn +strSRecMsg + rn);catch (Exception ex)txtMsg.A

10、ppendText(客戶端已斷開連接! + rn); break;/ /發(fā)送消息到客戶端/ / / private void btnSendMsg_Click(object sender, EventArgs e)ServerSendMsg(this.txtSendMsg.Text.Trim();this.txtSendMsg.Clear();/ /快捷鍵Enter發(fā)送信息/ / / private void txtSendMsg_KeyDown(object sender, KeyEventArgs e)if (e.KeyCode = Keys.Enter)ServerSendMsg(txt

11、SendMsg.Text.Trim();this.txtSendMsg.Clear();/ /獲取當(dāng)前系統(tǒng)時間的方法/ / 當(dāng)前時間private DateTime GetCurrentTime()DateTime currentTime = new DateTime();currentTime = DateTime.Now;return currentTime;/ /獲取本地IPv4地址/ / public IPAddress GetLocalIPv4Address()IPAddress localIpv4 = null;IPAddress IpList = Dns.GetHostAddre

12、sses(Dns.GetHostName();foreach (IPAddress IP in IpList)if (IP.AddressFamily = AddressFamily.InterNetwork)localIpv4 = IP;elsecontinue;return localIpv4;/獲取本地IP事件private void btnGetLocalIP_Click(object sender, EventArgs e)IPAddress localIP = GetLocalIPv4Address();this.txtIP.Text = localIP.ToString();us

13、ing using using usingusing using2.客戶端代碼System;System.Collections.Generic;System.ComponentModel;System.Data;System.Drawing;System.Linq;using System.Net;using System.Net.Sockets;using System.Text;using System.Threading;using System.Threading.Tasks;using System.Windows.Forms;namespace客戶端public partial

14、class Form1 : Formpublic Form1 ()InitializeComponent();private void Form1_Load(object sender, EventArgs e)Socket socketClient = null;Thread threadClient = null;/ /連接服務(wù)端事件/ / / private void btnListenServer_Click(object sender, EventArgs e)socketClient = new Socket(AddressFamily.InterNetwork, SocketTy

15、pe.Stream, ProtocolType.Tcp);IPAddress ipaddress = IPAddress.Parse(this.txtIP.Text.Trim();IPEndPoint endpoint = new IPEndPoint(ipaddress, int.Parse(this.txtPort.Text.Trim();trysocketClient.Connect(endpoint);this.txtMsg.AppendText(客戶端連接服務(wù)端成功! + rn); this.btnListenServer.Enabled = false;threadClient =

16、 new Thread(RecMsg);threadClient.IsBackground = true;threadClient.Start();catch (Exception ex)this.txtMsg.AppendText(遠(yuǎn)程服務(wù)端斷開,連接失??! + rn); / /接收服務(wù)端發(fā)來信息的方法/ private void RecMsg()while (true)trybyte arrRecMsg = new byte1024 * 1024;int length = socketClient.Receive(arrRecMsg);string strRecMsg = Encoding

17、.UTF8.GetString(arrRecMsg, 0, length);txtMsg.AppendText (服務(wù)端+ GetCurrentTime() + rn + strRecMsg + rn);catch (Exception ex)this.txtMsg.AppendText(遠(yuǎn)程服務(wù)器已中斷連接! + rn); this.btnListenServer.Enabled = true;break;/ /發(fā)送字符串信息到服務(wù)端的方法/ / 發(fā)送的字符串信息private void ClientSendMsg(string sendMsg)trybyte arrClientSendMs

18、g = Encoding.UTF8.GetBytes(sendMsg);socketClient.Send(arrClientSendMsg);txtMsg.AppendText (天涯+ GetCurrentTime() + rn + sendMsg +rn);catch (Exception ex) this.txtMsg.AppendText(遠(yuǎn)程服務(wù)器已中斷連接,無法發(fā)送消息! +rn);private void btnSendMsg_Click(object sender, EventArgs e)ClientSendMsg(this.txtClientSendMsg.Text.Tr

19、im();this.txtClientSendMsg.Clear();private void txtClientSendMsg_KeyDown(object sender, KeyEventArgs e)if (e.KeyCode = Keys.Enter)ClientSendMsg(this.txtClientSendMsg.Text.Trim();this.txtClientSendMsg.Clear();/ /獲取當(dāng)前系統(tǒng)時間的方法/ / 當(dāng)前時間private DateTime GetCurrentTime()DateTime currentTime = new DateTime()

20、;currentTime = DateTime.Now;return currentTime;網(wǎng) C5ock_ChatServerIF停止辟斤退出I八、實驗分析及總結(jié)實驗分析Socket消息傳輸?shù)墓ぷ髟??Socket是應(yīng)用層與TCP/IP協(xié)議族通信的中間軟件抽象層,它是一組 接口。在設(shè)計模式中,Socket其實就是一個門面模式,它把復(fù)雜的 TCP/IP協(xié)議族隱藏在Socket接口后面,對用戶來說,一組簡單的接口 就是全部,讓Socket去組織數(shù)據(jù),以符合指定的協(xié)議。Socket消息傳輸特點是什么?由于通常情況下socket連接就是TCP連接,因此socket連接一 旦建立,通信雙方即可開始相

21、互發(fā)送數(shù)據(jù)內(nèi)容,直到雙方連接斷開.但在 實際網(wǎng)絡(luò)應(yīng)用中,客戶端到服務(wù)器之間的通信往往需要穿越多個中間節(jié) 點,例如路由器/網(wǎng)關(guān)/防火墻等,大部分防火墻默認(rèn)會關(guān)閉長時間處于 非活躍狀態(tài)的連接,從而導(dǎo)致socket連接斷連,因此需要通過輪詢告 訴網(wǎng)絡(luò),該鏈接處于活躍狀態(tài).然而http連接使用的是請求-響應(yīng)方式.不僅在請求時需要建立連接, 而且需要客戶端向服務(wù)器發(fā)送請求后,服務(wù)器才能回復(fù)數(shù)據(jù).在很多情況下,需要服務(wù)器端主動向客戶端推送數(shù)據(jù),保持客戶端與 服務(wù)器數(shù)據(jù)的實時與同步.此時若雙方建立的是socket連接,服務(wù)器就可以直接將數(shù)據(jù)傳送給客戶端;若雙方建立的是http連接,則服務(wù)器需 要等到客戶端發(fā)

22、送一次請求后才能將數(shù)據(jù)傳回給客戶端,因此,客戶端定 時向服務(wù)器端發(fā)送連接請求,不僅可以保持在線,同時也是在詢問服務(wù) 器是否有新的數(shù)據(jù),如果有就將數(shù)據(jù)傳給客戶端。(3)TCP協(xié)議和UDP協(xié)議的區(qū)別?1)TCP協(xié)議面向連接.UDP協(xié)議面向非連接(有無鏈接)2)TCP協(xié)議傳輸速度慢.UDP協(xié)議傳輸速度快(傳輸速度)3)TCP協(xié)議保證數(shù)據(jù)順序.UDP協(xié)議不保證(數(shù)據(jù)的有序性.在IP層 時.數(shù)據(jù)包會變得無序)4)TCP協(xié)議保證數(shù)據(jù)正確性.UDP協(xié)議可能丟包(TCP保證數(shù)據(jù)的可靠 性)5)TCP協(xié)議對系統(tǒng)資源要求多.UDP協(xié)議要求少(TCP和UDP占用的資 源)實驗心得socket即套接字,用于描述地址和端口,是一個通信鏈的句柄。應(yīng)用程序 通過socket向網(wǎng)絡(luò)發(fā)出請求或者回應(yīng)。sockets(套

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論