Delphi的Socket編程要分幾步_第1頁
Delphi的Socket編程要分幾步_第2頁
Delphi的Socket編程要分幾步_第3頁
Delphi的Socket編程要分幾步_第4頁
Delphi的Socket編程要分幾步_第5頁
免費預覽已結束,剩余8頁可下載查看

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、Delphi 的 Socket 編程要分幾步?ClientSocket 和 ServerSocket幾個重要的屬性:l.client 和 server 都有 port 屬性,需要一致才能互相通信2.client 有 Address 屬性,使用時填寫對方(server)的 IP 地址幾個重要的事件:client:OnRead 事件,當 client 收到消息時在 OnRead 事件中可以獲得 server 發送過來消息。Server:OnClientRead 事件,與上述 client 的作用相同發送信息:clien 使用 SocketClient1.Socket.SendBuf(char 類型

2、的數組,信息長度);server 使用 SocketServer1.Socket.Connection0.SendBuf(char 類型的數組,信息長度);接收信息clien 使用 SocketClient1.Socket.ReceiveBuf(char 類型的數組,信息長度);server 使用 SocketServer1.Socket.Connection0.ReceiveBuf (char 類型的數組, 信息長度) ;使用 sockets:Socket 控件讓你建立一個利用 TCP/IP 和有關的協議與其他系統進行通信的應用。使用 Sockets,你能夠讀和寫通過它連接的其他機器,而不用

3、擔心實際的網絡軟件的相關細節。Sockets提供基于 TCP/IP 協議的連接。Delphi 提供通過網絡服務器或客戶應用程序去讀和寫其他的系統的功能。一個服務或客戶程序通常專注于一個單一的服務,如超文本傳送協議(HTTP 或文件傳輸協議(FTP%使用 serversockets,一個應用程序可以通過這些服務中的一個去連接一個希望使用服務的客戶程序。Clientsockets 允許一個應用使用這些服務中的一個去連接提供這個服務的服務應用。使用 sockets 去寫應用程序,你必須理解下面這些知識:一、服務工具當你需要寫網絡服務或客戶應用時,Sockets 提供一種接合。對于許多服務,象 HTT

4、P或 FTP,第三方服務商提供這些服務已經相當有效。有些甚至隨著操作系統捆綁而來,以便不用你自己寫。然而,當你想更多的控制服務的實現,比如想讓你的應用程序與網絡通信更加緊密,或當沒有一個服務能提供你特殊需要的服務時,你可能想建立你自己的服務或客戶應用。例如,工作在分布式 datasets 時,你可能想為數據庫寫一層與其他系統通信的應用。想使用 Sockets 實現一個服務,你必須理解:1 .服務協議在你寫一個網絡服務或客戶程序前,你必須明白你的應用將提供或使用什么服務。你的網絡應用必須支持許多服務的標準協議。如果你為標準的服務例如 HTTPFTP 寫網絡應用,你必須先理解與其他系統通信所使用的

5、協議。特殊服務細節你必須看提供的或使用的文檔。如果你的應用程序提供一個新的服務與其他系統通信,第一步是為這個服務的服務端和客戶端設計通信協議。什么信息將發送?如何整理這些信息?如何對這些信息進行編碼?應用程序通信經常的,你的網絡服務端或客戶端應用程序要提供一層在網絡軟件和一個應用之間使用的服務。例如,一個 HTTP 服務站點在 internet 與一個 Web 服務應用之間為 HTTP 請求信息提供內容和應答。在你的網絡應用(或客戶應用)和網絡軟件之間 Sockets 提供一個接口。你必須提供一個接口,在你的應用程序與應用間使用。你可以拷貝第三方服務商提供的標準 API(例如ISAPD,或你可

6、以設計和發布你自己的 API.2 .理解服務和端口許多標準服務都有關聯的、指定的端口號。當執行服務時,你可以為服務考慮一個端口號。如果你實現一個標準服務,Windowssocketobjects 提供一些方法讓你為服務尋找端口號。如果提供一個新的服務,在基于 Windows95 或 NT 機器上,你能夠在文件 Services中為你的服務指定一個相關聯的端口號。設置 Services 文件的更多信息請看微軟的 WindowsSockets 文檔。二、Socket 連接的類型Socket 連接可以分成三個基本的類型,它們反映了如何開始連接和本地 Socket 連接是什么。這三個類型是:1 .客戶

7、端連接客戶端連接是一個本地系統的客戶端 socket 與一個遠程系統上的服務端 Socket 連接。客戶端連接由客戶端 Socket 開始。首先,客戶端 Socket 必須描述它想連接到的服務端Socket.接著客戶端 socket 查找服務端 socket,當找到服務器時,就要求連接。服務端 socket 可能不能完成正確的連接。服務器 sockets 維持一個客戶端請求隊列,在他們有時間時完成連接。當服務端 socket 接受客戶端連接,服務端 socket 將向它想連接的客戶 socket 發送一個完整的描述,客戶端的連接完成。2 .監聽連接服務器 socket 不會主動去定位客戶端,他

8、們形成被動的半連接狀態,監聽來自客戶端的請求。服務器 sockets 形成一個隊列,存放它們聽到的連接請求。這個隊列記錄著客戶端連接請求,就象他們已連接進來一樣。當服務器 sockets 同意客戶端連接請求時,它將形成一個新的 socket 去連接客戶端,因此這個監聽連接能保持開放狀態允許其他客戶端的連接請求。3 .服務端連接當監聽 socket 同意一個客戶端請求時,服務器端 socket 形成一個服務器連接。當服務器端同意連接時,向客戶端發送一個服務端 socket 描述以完成連接,當客戶端 socket收到這個描述時這個連接得到確認,連接完成。一但連接到客戶端的 Socket 完成,服務

9、端連接就不能識別從一個客戶端來的連接。末端雙方有同樣的能力去接收同樣的事件類型。只有監聽(listening)連接是根本不同的,它只有一個單一的末端。三、sockets 描述Sockets 讓你的網絡應用軟件通過網絡與其他系統進行通信。在網絡連接中每個 socket 可以看成一個終端點。它有一個指定的地址。*這個系統正在運行*它理解的接口類型*用來連接的端口一個完整的 socket 連接描述,你必須提供 sockets 在連接兩端的地址。在你開始一個 socket連接前,你必須完整的描述你想得到的連接。有些信息可以從你的應用軟件運行的系統平臺上得到。例如,你不需要描述一個客戶端 socket

10、的本地 IP 地址-這個信息可以從操作系統上獲得。你必須提供你工作所依靠的 socket 的類型的信息。客戶端 socket 必須描述他們想連接的服務器。監聽服務器 sockets 必須描述他們提供反應的服務器的端口。一個socket 連接終端的完整描述包括兩部分:1.1 P 地址主機是這樣一個系統,它運行著包含有 socket 的應用程序。你必須描述主機給socket,通過給出主機的 IP 地址來完成這個描述。IP 地址是一個有四個數字(byte)值的,在 internet上使用的標準點分十進制字符串。例如:一個簡單的系統可以支持多于一個的 IP 地址。IP 地址通常難

11、于記憶并且容易打錯。一個可供選擇的方法是使用主機名。主機名就是 IP 地址的別名,它就是你常看到的統一資源定位符(URL)它是一個字符串,包括了協議、服務和域名。例如 http:/許多內部網提供給主機的名字對應的系統 IP 地址是 internet 的 IP 地址。在windows95 和 NT 機器上,如果一個主機名不能用,你可以在 HOSTS 文件中為你的本地 IP地址(這個本地 IP 地址應該是指你想連接的主機 IP 地址)建立一個進入的名字。關于 HOST 成件的更多彳 t 息請看 WINDOWSSOCKETS 勺文檔。服務器 sockets 不需要指定主機。本地 IP 地址可以從系統

12、中讀到。如果本地系統支持多于一個的 IP 地址, 服務器 sockets 將同時在所有的 IP 地址上監聽客戶端請求。 當一個服務器 socket同意一個連接,客戶端提供一個遠程 IP 地址。客戶端 sockets 必須通過提供主機名或者 IP 地址來指定遠程主機。在主機名和 IP 地址間作一個選擇許多應用軟件使用一個主機名去指定一個系統。主機名容易記住并且容易檢查錯誤。進一步講,服務器能改變系統或與 IP 地址關聯的特殊的主機名。使用一個主機名,能夠允許客戶端通過主機名描述找到抽象的站點,即使主機使用一個新的 IP 地址。如果主機名是未知的,客戶端 socket 必須指定服務器系統使用的 I

13、P 地址。通過給一個 IP 地址來指定服務器將更快。當你提供主機名時,socket 在定位服務器系統前,必須搜尋與這個主機名相關的 IP 地址。2.端口號雖然 IP 地址提供了足夠的信息去找到 socket 連接中位于另一端的系統,但你還必需要為 Socket 連接指定一個端口號。沒有端口號,一個系統在同一時間只能進行一個單一的連接。端口號是允許一個獨立系統同時支持多個主機連接的唯一標識,每個連接都必須指定個端口號。在網絡應用中,對于服務器工具來說端口號是一個數字代碼。有一個習慣就是監聽服務連接到他們自己固定的端口號上,以便他們能找到客戶端 sockets.服務器 socket 監聽為他們提供

14、服務的相關端口號。當他們允許給予一個客戶端 socket 連接時,他們創建一個獨立的 socket 連接,使用不同的專用的端口號。通過這個方法,能持續的監聽相關服務的端口號。客戶端 socket 使用一個專用的本地端口號,就不用其他的 socket 去尋找它們。他們指定他們想連接的服務器端 socket 的端口號,這樣他們就能找到服務器應用程序。常常的,這個端口號是通過命名想連接的服務來間接指定的。四、使用 socket 控件Delphi 提供兩個 socket 控件,客戶端 sockets 和服務器 sockets.他們允許你的網絡應用構成連接其他的機器和允許你通過這個連接來讀寫信息。與每個

15、 socket 控件相關聯的是windowssocket 對象,它們在終端的的作用是一個實際的 socket 連接。socket 控件使用windowssocket 對象去封裝 windowssocketAPI 調用,所以你的應用不用去關心連接建立的細節或管理socket 信息。如果你想利用 windowssocketAPI 調用或自定義連接細節,socket 控件提供了便利,你可以使用 windowssocket 對象的 properies,events 和方法。.使用客戶端 sockets添加一個客戶端 socket 控件(TClientSocket)至 U 你的 form 或 datam

16、odule 使你的應用成為一個 TCP/IP 客戶。客戶端 sockets 允許你指定你想連接的服務器 socket 和你希望服務器提供的服務。一但你描述你想得到的連接,你可以使用客戶端 socket 控件去完成連接服務。每個客戶端 socket 控件使用獨立的客戶端 windowssocket 對象(TClientWinSocket)去應答連接中的客戶終端。使用客戶端 sockets 去:A.指定想得到的服務客戶端 socket 控件有一個數字 properties,允許你指定想連接的服務器系統和端口。你可以通過主機名來指定服務器系統,使用 Hostpropertyo如果你不知道主機名,或者

17、你關心找到服務器的速度,你可以指定服務器系統的 IP地址,通過使用 Addresspropertyo你必須指定 IP 地址或主機名中的一個。如果你兩個都指定,客戶端 socket 控件將使用主機名。除服務器系統外,你必須指定你的客戶端 socket 將連接的在服務器系統上的端口。你能夠直接使用 Portproperty 來指定服務端口號。或者直接在 Serviceproperty 使用想得到的服務的名字。如果你指定端口號和服務名,客戶 socket 控件將使用服務名。.建立連接一旦你在客戶 socket 控件中完成了設置描述你想連接的服務器的屬性,你就可以進行連接,通過調用 Open 方法。如

18、果你想你的應用啟動時自動建立連接,在設計時設置 Activeproperty 為 true,通過使用 ObjectInspector 來設置。C 取得關于連接的信息完成連接到服務器 socket 后,你可以使用你的客戶 socket 控件相關的客戶 windowssocketobject 去取得關于連接的信息。使用 Socketproperty 去訪問 clientwindowssocketobject。windowssocketobject 有一個 properties,它能讓你確定在連接的兩端客戶和服務器使用的地址和端口號。當使用一個 windowssocketAPI 調用時,你可以使用

19、SocketHandleproperty 區獲得 socket 連接使用的 handle。你可以使用 Handleproperty 去訪問 windows,以便接收來自 socket 連接的信息。AsyncStylesproperty 決定哪種信息類型是 windowshandle 要接收的。D.關閉連接當你完成通訊想關閉 socket 連接時,你能夠通過調用 Close 方法來關閉連接。連接可能要由服務器端來關閉。如果是這種情況,你將收到一個 OnDisconnect 事件的通知。2.使用服務器 sockets添加一個服務端 socket 控件 ServerSocket 到你的 form 或

20、 datamodule 使你的應用成為一個TCP/IP 服務器。服務器 sockets 允許你指定你想提供的服務或你想用來監聽客戶端請求時使用的端口。你可以使用服務器 socket 控件去監聽和允許客戶連接請求。每個服務器 socket 控件使用一個單一的服務器 windowssocketObject(TServerWinSocket)去應答在服務器端監聽到的連接。 它通常使用一個服務器客戶 winodwssocketObject(TServerClientWinSocket)應答在服務器端每個活動的,連接著得到允許服務的客戶 socketo 使用服務器 sockets 去:A.指定端口在你的

21、服務器 socket 能夠監聽客戶請求之前,你必須指定一個端口給你的監聽服務。你可以使用 Portproperty 來指定這個端口。如果你的服務器應用提供一個標準的服務,這個服務使用一個習慣使用的相關聯的端口。你能夠使用 Serviceproperty 直接指定端口號。使用 Serviceproperty 是一個好的主意,能夠減少設置端口號時的錯誤。如果你既指定了 Portproperty,又指定了 Serviceproperty,服務 socket 將使用服務名。B.監聽客戶請求一旦你在 serversocket 控件上設置好你的端口號,你就能夠通過在運行時調用 Open 方法來監聽一個連接

22、。如果你希望你的應用程序能夠在啟動的時候自動監聽連接,在設計的時候通過使用 ObjectInspector 設置 Active 屬性為 true。C 連接到客戶端。當服務端 socket 控件監聽并接收到一個客戶端連接請求時他們將自動接受這個請求。當你每次收到通知時,OnClientConnetc 事件將發生。D.取得關于連接的信息一但你的服務器 socket 打開了監聽連接,你能夠使用與你的服務器 socket 控件相關 聯 的 服 務 器 windowssocketobject 來 取 得 關 于 連 接 的 信 息 。 使 用 Socketproperty 去 訪 問serverwind

23、owssocketobject。windowssocketobject 有個屬性能夠讓你找至 U 關于所有活動的客戶socket 連接,這些客戶 socket 是你通過服務器 socket 控件允許連接的。使用 Handle屬性去存取 windows 通過 socket 連接收到的信息。每個活動的,連接到客戶應用是通過服務、客戶windowssocketbject(TServerClientWinSocket)封裝的。你能夠通過 serverwindowssocketobject 的連接屬性來訪問所有的這些。這些 serverclientwindowssocketobject 有些屬性讓你能夠

24、決定哪些地址和端口號給連接的兩端-客戶和服務器 socket 使用。當你使用 windowssocketAPI 調用時,可以使用SocketHandle 屬性去獲得 socket 連接使用的 handle。你能夠使用 Handle 屬性去訪問windows 從 socket 連接處得來的信息。AsyncStyles 屬性決定 windowshandle 將接收哪種類型的信息。E 關閉連接當你決定關閉監聽連接時,調用 Close 方法。這將關閉所有打開著的,連接到客戶應用的連接,取消任何尚未同意的連接,接著關閉監聽連接以便你的服務 socket 控件不在接受任何新的連接。當客戶端關閉他們自己獨立

25、的連接到你的 serversocket 的連接時,你可以在 OnClientDisconnect 事件中得到訊息。五、socket 事件的應答當使用 sockets 寫應用程序時,大多數工作發生在 socket 控件的 handler 事件中。當通過 socket 連接開始讀或寫時,OnRead 和 OnWrite 事件在 non-blockingclientsockets 中發生從而通知 sockets.同樣的,服務器 sockets(blockingornon-blocking)收到 OnClientRead 和 OnClientWrite 事件.當服務器結束一個連接時,客戶 scoket

26、s 收到一個 OnDisconnect 事件.當客戶端結束一個連接時,服務器 socket 收到一個 OnClientDisconnect 事件.另外,客戶端 Sockets 和服務器端 socket 從連接中收到一個錯誤信息時,都將產生一個錯誤事件錯誤事件:客戶 sockets 和服務器 sockets 通常會產生一個 OnError 事件,當他們從連接中收到一個錯誤信息的時候.你能夠寫一個 OnError 事件處理去響應這些錯誤信息.這個OnError 事件處理提供傳送關于 socket 試圖做什么的時候這個錯誤發生的信息,以及錯誤信息提供的錯誤代碼.你可以在 OnError 事件處理中對

27、這個錯誤作出響應,并且把錯誤代碼改為 0,以避免 socket 產生一個例外.當開始和完成事件發生時,socket 控件通常會收到一個事件號(numberofevents).如果你的應用程序需要改變 socket 開始操作的處理過程或通過連接開始讀或寫操作時,你將寫事件 handlers 去應答這些 clientevents 和 serverevents.A.clientevents當一個客戶 socket 打開一個連接時,以下事件發生:.一個 OnLookup 事件最先發生,它試圖去定位 serversocket.在這里你不能改變Host,Address,Port,Service 屬 性 去

28、 改 變 你 想 定 位 的 服 務 器 . 你 能 夠 使 用 Socket 屬 性 去 訪 問clientwindowssocketobject,并且使用它的 SocketHandle 屬性去調用 windowsAPI,以便改變 socket 的客戶屬性.例如,如果你想在客戶應用軟件中設置端口號,你必須在 serverclient 連接前做這件事.windowssocket 設置和初始化事件通知.當找到 serversocket 一個 OnConnecting 事件發生.在這事件中,windowsSocketobject可以利用的是通過 socket 屬性提供關于連接的另一端的服務 soc

29、ket 的一些信息.這是獲得實際使用來連接的端口和 IP 地址的第一個機會,它可能不同于從監聽 socket 處同意連接時得到的端口或 IP 地址.服務器同意連接請求,客戶端 socket 完成連接.當一個連接得到確定后, 一個 OnConnect 事件發生.如果你的 socket 立即開始通過連接讀或寫,就應寫一個 OnConnect 事件 Handler 去作這件事.e8a09208%561-Numbered_fcfe13e4-12ab-4e1f-936b-ced77.服務器端事件(serverevents)服務器 socket 控件通過兩種方式連接:監聽連接和連接到客戶應用.服務器 so

30、cket 收到這兩個連接的所有事件.監聽時事件Delphi 的 Socket 編程要分幾步?當構成監聽連接前,OnListen 事件發生.在這個時候你能夠通過 socket 屬性獲得serverwindowssocketobject.你能夠使用它的SocketHandle屬性去改變 socket,在socket打開監聽之前.例如,如果你想限定監聽服務使用的 IP 地址,你可以在這個 OnListen 事件 Handler 中做.與客戶端連接的事件當一個服務器 socket 同意一個客戶連接請求時,接下來的事件發生:攙攙愀 愀攀愀 戀戀 戀昀戀攀愀攀攀昀 一甀洀戀攀爀攀攙開戀昀%25345 昀戀

31、昀 挀 戀攙 昀戀昀戀.服務器 socket 產生一個 OnGetSocket 事件, 通過 windowssockethandle 傳送給連接的另一端的 socket.如果你想提供自己定義的 TServerClientWinSocketofdescendant,你可以在 OnGetSocket 事件 handler中建立,將被用來替代 TServerClientWinSocket.攙攙愀 愀攀愀 戀戀 戀昀戀攀愀攀攀昀 一甀洀戀攀爀攀攙開戀昀%25345 昀戀昀 挀 戀攙 昀戀昀戀.一個 OnAccept 事件發生,傳送新的 TServerClientWinSocket 對象給事件句柄.這是

32、第一個要點,當你使用 TServerClientWinSocket 的屬性去獲得被連接中服務的那端的客戶的信息時.攙攙愀 愀攀愀 戀戀 戀昀戀攀愀攀攀昀 一甀洀戀攀爀攀攙開戀昀%25345 昀戀昀 挀 戀攙 昀戀昀戀.如果服務類型是 stThreadBlocking,一個 OnGetThread 事件發生。如果你想提供自己定義的TServerClientThread 子類,你可以在 OnGetThread 事件句柄中建立一個,它將替代TServerClientThread.攙攙愀 愀攀愀 戀戀 戀昀戀攀愀攀攀昀 一甀洀戀攀爀攀攙開戀昀%25345 昀戀昀 挀 戀攙 昀戀昀戀.如果服務類型是 s

33、tThreadBlocking,一個 OnThreadStart 事件發生。當這個線程(thread)開始執行時.如果你想執行任何初始化這個線程,或調用一些 windowssocketAPI 在這線程開始通過連接讀和寫之前,應該使用 OnThreadStart 事件句柄.攙攙愀 愀攀愀 戀戀 戀昀戀攀愀攀攀昀 一甀洀戀攀爀攀攙開戀昀%25345 昀戀昀 挀 戀攙 昀戀昀戀.當客戶端完成一個連接時,一個 OnClientConnect 事件發生.如果是 non-blocking 服務,你可能想開始通過 socket 連接在這端進行讀或寫操作.六、通過 Socket 連接進行讀和寫通過 socke

34、t 連接到其他機器的原因是想通過這些連接來讀和寫信息.什么信息是你要讀和寫的,或者當你想讀和寫時是依靠哪些 socket 連接的相關服務的.通過 sockets 進行讀和寫可以是異步的,所以在你的網絡應用中不需要阻塞其他代碼的執行。這是調用 non-blockingconnection.你也同樣可以通過 blockingconnection,這時你的下一行代碼的執行必須等到讀或寫操作完成A.Non-blocking連接,讀和寫是異步的,所以在你的網絡應用中不需要阻塞其他代碼的執行.建立一個 Non-blocking 連接:.在客戶 socket 中設置 ClientType 屬性為 ctNon

35、Blocking.在服務器 socket 中設置 ServerType 屬性為 stNonBlocking.當連接是 non-blocking 時,連接的另一端企圖讀或寫時讀和寫事件將把這個信息通知你的socket.讀和寫操作事件Non-blockingsockets 想通過連接讀或寫時,它會產生一個讀和寫操作事件通知你的 socket.在客戶端 sockets,你可以在 OnRead 或 OnWrite 事件句柄中對這些事件做出反應.在服務器端 Scokets,可以在 OnClientRead 或 OnClientWrite 事件句柄中對這些事件做出反應.與socket 連接相關聯的 win

36、dowssocketobject 在事件句柄的讀或寫中被當作一個參數.Windowssocketobject 提供一個方法號(numberofmethods)以允許你通過連接讀或寫.通過 socket 連接讀,使用 ReceiveBuf 或 ReceiveText 方法.在使用 ReceiveBuf 方法前,使用Receivelength 方法去確定在連接的另一端 socket 準備發送白字節數(numberofbytes).通過 socket 連接寫,使用 SendBuf,SendStream 或 SendText 方法.如果你通過 socket 發送信息后不再需要 socket 連接, 你

37、可以使用 SendStreamThenDrop 方法.SendStreamThenDrop 在寫完所有的信息后將關閉 Socket 連接,它能夠從 stream 讀信息.如果你使用 SendStream 或SendStreamThenDrop 方法,不要釋放 Streamobject,socket 在連接結束后會自動釋放這個 Stream.注意:SendStreamThenDrop 將關閉一個獨立的客戶連接服務,而不是監聽連接.B.Blockingconnections當你使用的連接是 Blocking 時,你的 Socket 必須通過連接發起讀或寫操作,勝過被動的等待從 socket 連接發

38、來的通知.當你的連接末端的讀和寫操作發生改變時使用 Blockingsocket.對于客戶端 sockets,設置 ClientType 屬性為 ctBlocking 以便構成一個blocingconnection.根據你的客戶端應用想完成什么,你可能想建立一個執行線程去完成讀或寫操作,以便你的應用能夠繼續執行其他的線程,當它在等待通過連接讀或寫操作的完成.對 于 服 務 器 sockets, 設 置 ServerType 屬 性 為 stThreadBlocking 以 便 構 成 一 個blockingconnection.因為blockingconnections在等待通過連接讀或寫信息

39、完成時掛起了其他代碼的執行,服務器 socket 控件通常產生一個新的執行線程給每一個客戶連接,當 ServerType 設置為stThreadBlocking 時.許多使用 Blocking 連接的應用都寫使用線程(usingthreads.甚至如果你不使用線程你可能也想使用 TWinSocketStream 去讀和寫.1)usingthreads當使用一個 blockingconnection 進行讀或寫操作時,客戶 sockets 不會自動產生一個新線程.如果你的客戶應用程序沒有什么事做,直到讀或寫信息完成,那么這正是你想要的.如果你的應用包括了一個用戶界面,它還需要響應用戶的操作,那么,你可能想產生一個獨立的線程去讀寫.當服務器 sockets 形成一個 blocking 連接時,他們常常產生獨立的線程給每一個客戶連接,所以沒有客戶需要等待直到其他客戶完成通過連接讀或寫操作.在默認,f#況下,服務器 sockets 使用 TS

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論