1 / 38

Socket

Socket. Original by 黄嘉輝 Modification by 游象甫. Java 網際網路程式設計, 文魁資訊. Overview. Berkeley Socket Microsoft Windows Socket Java Socket. Socket Interface. 一種應用程式介面( API) 介於應用程式與硬體之間,並提供標準的函式以符合不同的網路硬體規格

Download Presentation

Socket

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Socket Original by 黄嘉輝 Modification by 游象甫 Java 網際網路程式設計, 文魁資訊

  2. Overview • Berkeley Socket • Microsoft Windows Socket • Java Socket

  3. Socket Interface • 一種應用程式介面(API) 介於應用程式與硬體之間,並提供標準的函式以符合不同的網路硬體規格 • 最早的Socket Interface於1980年代由加州柏克萊大學為支援UNIX作業系統上的TCP/IP應用所開發的Socket介面,稱為Berkeley Socket Interface,而其軟體則稱為Berkeley Software Distribution (BSD)

  4. Berkeley Socket • Berkeley Socket Interface是一組函式,介於網路應用程式與作業系統及網路硬體間,應用程式透過呼叫Socket Interface,發展具有TCP/IP網路功能之應用

  5. Server端BSD API函式 • socket • 建立socket • bind • 設定socket所使用的local端IP 位址及通訊埠 • listen • 設定socket等候(listen)Client端連結請求 • accept • 接受自Client端的連結請求並建立socket連結 • recv • 接收來自Client端所傳送的資料 (TCP) • read • 接收來自Client端所傳送的資料 (TCP)

  6. Server端BSD API函式 (cont.) • recvfrom • 接收來自Client端所傳送的資料 (UDP) • send • 傳送資料至Client端 (TCP) • write • 傳送資料至Client端 (TCP) • sendto • 傳送資料至Client端 (UDP) • closesocket • 關閉通訊連結及socket,並且釋放系統資源 • shutdown • 關閉socket的傳送及接收功能

  7. Client端BSD API函式 • socket • 建立socket • connect • 建立與Server端socket連線 • recv • 接收來自Server端所傳送的資料 (TCP) • read • 接收來自Server端所傳送的資料 (TCP) • recvfrom • 接收來自Server端所傳送的資料 (UDP)

  8. Client端BSD API函式 (cont.) • send • 傳送資料至Server端 (TCP) • write • 傳送資料至Server端 (TCP) • sendto • 傳送資料至Server端 (UDP) • closesocket • 關閉通訊連結及socket,並且釋放系統資源 • shutdown • 關閉socket的傳送及接收功能

  9. Berkeley Socket網路應用 • Berkeley Socket在網路應用程式開發上,大致有下列兩類 • Stream Socket(Connection-Oriented Protocol) • Datagram Socket(Connectionless Protocol)

  10. BSD Stream Socket • 使用TCP傳送資料 • TCP 在傳遞資料之前,會先在主機間建立通訊連結,依據此通訊連結傳遞資料 • 可保證資料無誤送達,且到達順序與送出順序相同

  11. Server端Stream Socket連線流程

  12. Client端Stream Socket連線流程

  13. BSD Datagram Socket • 使用UDP傳送資料 • 與TCP不同的是,TCP在傳遞資料之前須先建立通訊連結,但UDP則不需要,僅須設定電腦間的IP及使用的Port,則可互相傳遞訊息 • UDP不提供資料錯誤的偵測及資料重送等機制,因此並不確保資料能完整送達

  14. Datagram Socket連線流程 • 由於不必建立雙方的連線,因此只需利用sendto及recvfrom傳送及接收資料 • 最後仍利用closesocket關閉Socket並釋放系統資源

  15. MS Windows Socket • Microsoft Windows Socket(簡稱WinSock),是Microsoft以Berkeley Socket API為基礎所發展出來的 • 在MS Windows 3.1之前,Windows並不包含支援TCP/IP的Socket API,因此在網路功能上相對地不足 • 支援網路功能則由Third-Party協力廠商開發 • Trumpet WinSock、Chameleon、NetWare支援TCP/IP的Socket API應用函式庫

  16. WinSock (cont.)

  17. WinSock 應用程式 WinSock 應用程式 WinSock 1.1 winsock.dll (16 bit) wsock32.dll (32 bit) Winsock 2.0 ws2_32.dll (32 bit) TCP/IP Protocol Network WinSock API函數 • 由winsock.dll、wsock32.dll到ws2_32.dll,版本則由1.0、1.1至2.0版 • 下圖為WinSock API各版本之間的相容性

  18. WinSock API函數 (cont.) • WinSock API可分為四大類 • BSD Socket API • WinSock延伸(Extended)函數 • 轉換(Conversion)函數 • 資料庫(Database)函數

  19. WinSock BSD API • 以BSD Socket API為基礎所發展出來的 • 在Winsock 2.0已漸漸被Winsock延伸函數(Extended API)所取代 • 主要功能在於建立socket連線、傳送或接收數資料

  20. WinSock延伸(Extended)函數 • 因應Windows的Multi-Task、Event-Driven與Message-Driven的環境,以BSD Socket API為基礎而發展出的WinSock API函數 • 提供BSD Socket API所沒有的非同步(Asynchronous)及訊息導向的Socket API • 為了區別起見,Winsock延伸函數均以WSA開頭 • 大部分的WinSock延伸函數的功能與BSD Socket API差不多 • 例如BSD Socket API的connect相對應的WinSock延伸函數則是WSAConnect

  21. WinSock延伸(Extended)函數 (cont.) • WSAAccept • 接受自Client端的連結請求並建立socket連結 • WSAConnect • 建立socket之間的連線 • WSARecv • 接收來自Client端所傳送的資料 (TCP) • WSARecvFrom • 接收來自Client端所傳送的資料 (UDP) • WSASelect • 設定socket的讀寫狀態的I/O傳輸 • WSASend • 傳送資料至Client端 (TCP) • WSASendTo • 傳送資料至Client端 (UDP)

  22. WinSock延伸(Extended)函數 (cont.) • WSASocket • 建立socket • WSACloseEvent • 關閉WinSock事件 • WSACreateEvent • 建立WinSock事件 • WSAResetEvent • 更新WinSock事件 • WSASetEvent • 設定WinSock事件 • WSAEnumNetworkEvents • 回傳目前所有的WinSock事件 • WSAWaitForMultipleEvents • 等待正在blocking的WinSock事件

  23. WinSock 轉換(Conversion)函數 • 主要將32 bit或16 bit的整數從主機位元順序(Host Byte Order)轉換為網路位元順序(Network Byte Order),或者是由網路位元順序轉為主機位元順序 • 也提供32位元IP位址與ASCII位址之間的轉換

  24. WinSock 轉換(Conversion)函數 (cont.) • WSAHtonl • 將32位元長整數從主機位元順序(host byte order)轉換至網路位元順序(network byte order) • WSAHtons • 將16 位元短整數從主機位元順序(host byte order)轉換至網路位元順序(network byte order) • WSANtohl • 將32 位元長整數從網路位元順序(network byte order) 轉換至主機位元順序(host byte order) • WSANtohs • 將16 位元短整數從網路位元順序(network byte order) 轉換至主機位元順序(host byte order)

  25. WinSock資料庫(Database)函數 • 雖名為資料庫函數,但與資料庫並無關聯 • 主要在處理IP Address與主機名稱(DNS Name)間的轉換或者取得通訊協定或通訊埠(Port)等相關資訊

  26. WinSock資料庫(Database)函數 (cont.) • WSAAsyncGetHostByAddr • 以主機IP位址執行非同步取得主機的相關資訊 • WSAAsyncGetHostByName • 以主機名稱執行非同步取得主機的相關資訊 • WSAAsyncGetProtoByName • 以通訊協定的名稱執行非同步取得通訊協定的相關資訊 • WSAAsyncGetProtoByNumber • 以通訊協定的號碼執行非同步取得通訊協定的相關資訊 • WSAAsyncGetServByName • 以服務的名稱及通訊協定執行非同步取得服務的相關資訊 • WSAAsyncGetServByPort • 以服務的通訊埠及通訊協定執行非同步取得服務的相關資訊

  27. WinSock網路應用 • WinSock的應用程式可分為兩類 • Stream Socket • Datagram Socket

  28. WinSock Stream Socket流程

  29. WinSock Datagram Socket流程 • 不需要事先建立連線,因此傳遞資料的雙方並無實際的連線關係存在,只需利用WSARecvFrom及WSASendTo接收及傳送資料

  30. Java Socket • Java支援網路的API • java.net (Networking) • javax.net.ssl (Networking with Secure Socket Layer) • java.rmi (Remote Method Invocation) • javax.rmi (Remote Method Invocation for IIOP)

  31. java.net • 其API分為以下幾類 • 處理URL(Uniform Resource Locator) • 處理主機名稱及IP Address • 處理UDP(User Datagram Protocol)通訊協定 • 處理TCP(Transmission Control Protocol)通訊協定 • 處理網路認證(Authentication)及權限(Permission) • 內容處理器(ContentHandler)

  32. 處理URL • Interface • URLStreamHandlerFactory • Class • java.net.HttpURLConnection • java.net.JarURLConnection • java.net.URL • java.net.URLClassLoader • java.net.URLConnection • java.net.URLDecoder • java.net.URLEncoder • java.net.URLStreamHandler • Exception • java.net.MalformedURLException • java.net.UnknownServiceException

  33. 處理主機名稱及IP Address • Class • java.net.InetAddress • Method • public byte[] getAddress() • public static InetAddress[] getAllByName(String host) throws UnknownHostException • public static InetAddress getByName(String host) throws UnknownHostException • public String getHostAddress() • public String getHostName() • public static InetAddress getLocalHost() throws UnknownHostException • Exception • java.net.UnknownHostException

  34. 處理UDP通訊協定 • Interface • DatagramSocketImplFactory • Class • java.net.DatagramPacket • java.net.DatagramSocket • java.net.DatagramSocketImpl • java.net.MulticastSocket • Exception • java.net.SocketException

  35. 處理TCP通訊協定 • Interface • SocketImplFactory • SocketOptions • Class • java.net.ServerSocket • java.net.Socket • java.net.SocketImpl • Exception • java.net.BindException • java.net.ConnectException • java.net.NoRouteToHostException • java.net.ProtocolException • java.net.SocketException

  36. 處理網路認證及權限 • Class • java.net.Authenticator • java.net.NetPermission • java.net.PasswordAuthentication • java.net.SocketPermission

  37. Java Stream Socket流程

  38. Java Datagram Socket流程

More Related