2013年4月29日 星期一

DIY - 智能小車:Microsoft Windows Socket API 介紹 (二十六)

DIY - 智能小車:Microsoft Windows Socket API 介紹 (二十六)

筆者的智能小車是由 Microchip PIC16F877A 處理板控制,而小車的控制會由無線路由器 TP-Link TL-WR703N 發,控制訊息是利用無線 WiFi IEEE802.11 標準來傳送,在 PC 電腦的網絡會經由網線 IEEE802.3)連接另外一個無線路由器 Router 將訊息收發,所有網絡的硬件都是用 IEEE802 標準的。

智能小車控制圖
而網路程式的核心是 SocketSocket 是一組應用程式介面 (APIApplication Programming Interface) 介於應用程式與作業系統∕硬體之間,並提供標準的函式以符合不同的網路硬體規格,筆者是使用 Microsoft Visual Studio 2010 C++ 作網路編程,早在 1989 Berkeley 大學為了支援 UNIX 作業系統而發展了一套具備 TCP/IP 網路功能的 Berkeley Socket APIBSD sockets),Microsoft Berkeley Socket API 為基礎也發展出一套相似的 Socket 函式庫,即 Microsoft Windows Socket API (簡稱WinSock API),WinSock API 是一套動態連結函式庫(DLL),即程式在編譯時期並不會和這些函式庫連結,而是等到執行期間才會呼叫這函式。

Socket API in the OSI and TCP/IP models
Socket API
每個網路應用程式都有一個通訊端點,一種端點是用戶端(Client),另一種是伺服器(Server)。根據定義,用戶端會先送出第一個封包,由一個伺服器接收。在初步接觸後,用戶端和伺服器均能開始收送資料。


Flow diagram for TCP sockets

所有的網路應用程式皆可分為五個步驟:
  1. 開啟一個 Socket (Open)
  2. Socket 命名 (Bind)
  3. 與另一個 Socket 結合 (Connect)
  4. Sockets 間收送資料 (Send/Receive)
  5. 關閉 Socket (Close)
TCP Client Server Socket Connection
WinSock BSD Socket API 的函式庫:
WinSock Extended API
BSD Socket API
Description
WSAAccept
accept
accept 的延伸WinSock API
listening 的伺服端 Socket 接受來自remote Socket 的連結請求,並且建立Socket 連結。
WSASelect
select
select 的延伸WinSock API
設定Socket 的讀、寫狀態的I/O 傳輸。
WSAConnect
connect
connect 的延伸WinSock API
建立Socket 之間的連線。
WSARecv
recv
recv 的延伸WinSock API
接收來自另一Socket 所傳送的資料。
WSARecvFrom
recvfrom
recvfrom 的延伸WinSock API
接收來自另一Socket 所傳送的資料並且回傳此Socket 資訊。
WSASend
send
send 的延伸WinSock API
傳送資料至另一Socket
WSASendTo
sendto
sendto 的延伸WinSock API
傳送資料至指定IP 位址及通訊埠。
WSASocket
socket
socket 的延伸WinSock API
建立Socket

參考網頁
Wikipedia – Network socket
Wikipedia – Berkeley sockets
◎ Wikipedia – Winsock 

2013429 天氣報告
氣溫:25.2 @ 22:20
相對濕度:百分之95%
天氣:微雨

沒有留言:

張貼留言