實驗二 UDP 通訊實驗

2021-08-03 16:38:55 字數 2028 閱讀 3192

一、實驗目的

進一步理解 winsock api 的呼叫方法。

了解 udp 協議的工作原理。

掌握 udp 服務端程式和客戶端程式的編寫流程。

熟悉程式的除錯方法。

二、實驗設計

1、背景知識 

winsock 程式設計模型 winsock 程式設計的主要模型分為流套接字程式設計模型和資料報套接字程式設計模型兩類,主要區別在於:前者提供雙向的、有序的、無重複並且無記錄邊界的資料流服務,即採用有連線的 資料傳輸服務,保證資料可靠到達;後者也支援雙向資料流,但不能保證資料的可靠、有序和無重複,它保留了記錄邊界,是一種無連線、不可靠的資料傳輸模型。

資料報套接字程式設計模型

資料報套接字使用 udp 協議進行資料的傳輸,是一種無連線的資料傳輸模型,程式設計過程相對簡單,採用客戶/伺服器(c/s)結構進行設計。

在資料報套接字程式設計模型中,客戶端傳送資料(也稱傳送端),伺服器端接收資料(也稱接收端)。實際上,由於資料報套接字程式設計模型也支援雙向資料傳遞,因此,伺服器端和客戶端的概念已經比較模糊。為了說明資料報套接字程式設計模型的工作原理,這裡仍然沿用這兩個概念。

資料報套接字的服務程序和客戶程序不需要在通訊前建立連線,僅需要建立各自的套接 字,因此程式設計過程相當簡單,簡述如下:

接收端:(1)、建立資料報套接字;(2)、繫結本機位址和埠;(3)、等候接收資料;(4)、使用 完成後關閉套接字。

傳送端:(1)、建立資料報套接字;(2)、向指定位址和埠傳送資料;(3)、使用完成後關閉套接字。

資料報套接字程式設計使用的函式

(1) 建立套接字函式 socket() socket socket(int af,int type,int protocol); 

由於採用資料報套接字進行資料傳輸,因此 type 引數必須設定為 sock_dgram, protocol 引數必須設定為 ipproto_udp 

(2) 繫結本地位址到所建立的套接字函式 bind()

int bind(socket s,const struct sockaddr* name,int namelen);

在實際程式設計時可以省略該函式,系統會自動繫結 

(3) 接收資料函式 recvfrom() 

int recvfrom(socket s,char* buf,int len,int flags, struct sockaddr* from,int* fromlen); 

(4) 傳送資料函式 sendto() 

int sendto(socket s,const char* buf,int len,int flags, const struct sockaddr* to,int* tolen); 

(5) 關閉套接字函式 closesocket() 

int closesocket(socket s);

資料報套接字程式設計模型時序和流程

為便於理解資料報套接字模型下的程式設計過程,用時序圖表述如下(請注意,時序圖不同 於程式流程圖,它只是對完成一次通訊過程進行原理性描述的手段。

2、實驗內容 

(1)、認真理解資料報套接字程式設計模型,仔細閱讀並除錯執行 udpserve.cpp 程式和 utpclient.cpp 程式源**,分析在服務端和客戶端分別使用了哪些 winsock api 函式,寫 入實驗報告; 

(2)、修改 udpserver 和 udpclient 程式,設計乙個簡單的 udp 通訊程式,並達到以下要 求: 

a.雙方能相互傳送資料,並顯示接收到的資料。

b.當收到對方的資料為「bye」時,能退出程式。

c.程式設計驗證實驗思考題中問題。

d.選做,伺服器同多個客戶端通訊。

三、實驗過程(包含實驗結果)

1、執行伺服器和客戶端程式

IDC通訊實驗

背景 模擬下idc機房通訊流程,其實就是根據自己的想法來做的實驗,有不對之處,請指正 在這裡我們假設有兩種流量,應用與管理流量,我們想讓其管理流量與應用流量分開,但以下實驗並沒有完全將應用流量與管理流量分開,因我們有內網的應用如db,那麼,我們應該使用其管理口來使流量分開,此次實驗沒有做,而且內網還...

串列埠通訊實驗

晶振12mhz,波特率1200,程式啟動後微控制器主動發出hello server,pc使用串列埠助手應答微控制器,當微控制器收到pc發來的資料aah後,將30h 3fh的16個位元組傳送給pc,當51收到e0h時就發40h 5fh的32個位元組資料,若微控制器收到其他資料後,則不做任何修改返回pc...

微控制器實驗 串列埠通訊實驗

實驗三 串列埠通訊實驗 內容 1 利用電腦串列埠與實驗台串列埠進行連線 2 根據幀格式定義 波特率定義,程式設計配置串列埠,並編寫控制程式 3 實現從電腦上輸入控制字元,由微控制器通過串列埠接收,並控制led顯示的功能 4 對所程式設計序進行除錯及驗證。要求 1 掌握波特率的概念 學會程式設計設定波...