網路通訊元件Winsock
網際網路的基礎通訊協定是TCP/IP,所有的網路通訊包括全球資訊網(WWW)、電子郵件、FTP甚至MSN都是以這個協定進行,可以說是網路的基礎交通規則,在VB6時代已經建立了一個工具元件稱為Winsock,可以執行TCP/IP模式的通訊,目前.NET下還沒這麼簡單好用的東西,本單元我們就來使用這個元件,設計一個最簡單的一對一即時通程式。

Winsock元件的位置
此元件不屬於新版的.NET預設的使用範圍,必須到設計表單頁面的工具箱中,對著元件部分按滑鼠右鍵,選擇『選擇項目』,出現選單後,選擇COM元件頁籤,找到Microsoft Winsock Control...項目選取後確定。工具箱會出現此元件,圖示為兩個重疊的電腦。
 

試試 Winsock 的威力→顯示我的IP
雙擊Winsock元件,圖示會出現於表單上,預設名稱為AxWinsock1。請雙擊表單,在Form_Load事件中寫程式:

執行程式你的電腦IP會出現於表單標題,在此Local指的是本地端電腦,相對的待會你要聯繫的遠端通訊對象就是Remote

建立通訊介面如下:

設定Winsock的通訊參數:
1. 通訊協定 Protocol = UDP
→ UDP全名 User Datagram Protocol 使用者資料通訊協定,這是簡單的發後不理的方式,類似無線電手機。
→另一選項是 TCP,Transfer Control Protocol,必須對方接受連線才能通訊,類似我們的電話手機。
2. LocalPort = ????
設定本地端使用的通訊埠,號碼應大於1024,小於65536。遠端發射訊號進來時應指定這個Port接收。
3.RemoteHost = 遠端電腦的IP
4.RemotePort = 遠端電腦收訊的通訊埠
5.鎖定接聽的頻道:Form_Load程式中加入一行程式:Me.AxWinsock1.Bind(LocalPort, LocalIP)
→參數一是你自己定的LocalPort,參數二是你自己的IP

發送訊息的程式

按Button1應送出訊息,因為資料傳送時必須是位元組陣列的原始資料型態,所以必須用到字串轉為位元組(Binary)資料的函數。
SendData是傳送資料的指令,傳送後將填入輸出字串的文字盒清空,讓使用者知道訊息已經傳出。

接收訊息的程式

當遠端資料到達你的電腦時,會觸發Winsock的 DataArrival 事件,先接收位元組陣列資料,再轉為字串資料。
GetData 是收取資料的指令,TextBox2.Select是將游標移回到輸出用的文字盒,事實上遊標應該永遠在那邊。

請調整你的遠端通訊對象,RemoteIP RemotePort 就可以和其他同學的程式通訊了!

說明:
這個單元介紹的內容,精確的說是網路上的UDP通訊程式。這種通訊只負責對指定位置發出訊息,並不確認資料是否到達。所以即使對方程式根本不存在或沒啟動,發射端都不會自動知道,必須等到對方回訊才能確認。甚至,如果你的資料傳丟了,你也不會知道的!這種通訊形式多半用於需要快速度,但是偶爾掉一點資料無傷大雅的地方,譬如網路廣播電台或視訊等等。
在網路上多數的時候,資料必須非常精確,譬如一個Word檔案如果錯一點點,可能格式就不對,而變得無法開啟了!
此時必須確認所有資料封包都正確傳到,如果沒傳好必須重傳,這種通訊方式稱為 TCP,程式寫作程序較複雜,下學期再教囉!