90 likes | 437 Views
Winsock 程式實作 以 UDP 為例. 何謂 socket. 從網路的角度來看, socket 就是通訊連結的端點;從程式設計者的角度來看, socket 提供了一個良好的介面使程式設計者不需知道下層網路協定運作的細節便可以撰寫網路通訊程式。 Windows Socket API 是一套動態連結函式庫 (DLL) ,即程式在編譯時期並不會和這些函式庫連結,而是等到執行期間才會呼叫這函式。. Sockets 的分類. 在 TCP/IP 架構下, sockets 可分為下面兩類: Datagram sockets (connectionless)
E N D
何謂socket • 從網路的角度來看,socket就是通訊連結的端點;從程式設計者的角度來看,socket提供了一個良好的介面使程式設計者不需知道下層網路協定運作的細節便可以撰寫網路通訊程式。 • Windows Socket API是一套動態連結函式庫(DLL),即程式在編譯時期並不會和這些函式庫連結,而是等到執行期間才會呼叫這函式。
Sockets的分類 • 在TCP/IP架構下,sockets可分為下面兩類: • Datagram sockets (connectionless) • 資料在datagram sockets間是利用UDP封包傳送,因此接收端socket可能會收到資序錯誤的資料,且其中部分資料亦可能會遺失。 • Stream sockets (connection-oriented) • 資料在stream sockets間是利用 TCP 封包來傳送,因此接收端 socket 可以收到順序無誤、無重覆、正確的資料。此外,TCP傳送時是採資料流的方式,因在傳送時會所有資料會視情況被分割在數個 TCP封包中。 • Sockets在產生時便需指定其種類,且唯有同類之sockets才能彼此溝通。
主從式架構模型(Client/Server model) • 每個網路應用程式都有一個通訊端點,一種端點是用戶端,另一種是伺服器。根據定義,用戶端會先送出第一個封包,由一個伺服器接收。在初步接觸後,用戶端和伺服器均能開始收送資料。 • 所有的網路應用程式皆可分為五個步驟: • 開啟一個socket • 為socket命名 • 與另一個socket結合 • 在sockets間收送資料 • 關閉socket
UDP Client Server WinSock WinSock .Bind .GetData接收 client 端傳過來的資料 資料傳輸 .SendData _DataArrival .GetData接收 Server 端傳過來的資料 資料傳輸 .SendData _DataArrival .Close
Client端程式 Server_IP Server_Port Msg_send msg_server
範例程式(for VB)Client端程式 Private Sub Command1_Click() On Error Resume Next '執行階段發生錯誤,繼續執行下去 Winsock1.Protocol = sckUDPProtocol ‘udp Winsock1.RemoteHost = Server_IP.Text ‘設定server的IP Winsock1.RemotePort = Server_Port.Text ‘設定server的通訊埠 Winsock1.SendData Msg_send.Text ‘送出資料 End Sub Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long) ‘Winscok收到資料時會呼叫的副程式 Dim data As String On Error Resume Next '執行階段發生錯誤,繼續執行下去 Winsock1.GetData data ‘收資料轉為字串 Label1.Caption = data End Sub
範例程式(for VB) Server端程式 Private Sub Form_Load() Winsock1.Protocol = sckUDPProtocol ' udp Winsock1.Close Winsock1.Bind (Server_Port) End Sub Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long) Dim data As String On Error Resume Next'執行階段發生錯誤,繼續執行下去 Winsock1.GetData data If Err Then ‘ 處理錯誤 Else ‘處理收到的data Winsock1.SendData data ‘送回資料 End If End Sub
作業 • 設計一 UDP client 端程式, 以 UDP 協定將自己的學號姓名送到 udp server 端( server 之 IP= 163.17.137.244, port=8888) , 並接收 server 端傳送回來之訊息 • 說明: 連線成功者, server 端會呈現所傳送之學號姓名等資訊 • 期限:期末考之前