C# Socket 編程

來源:互聯網
上載者:User

標籤:

EndPoint 類

標識網路地址。這是一個 abstract 類。

命名空間:  System.Net
程式集:  System(在 System.dll 中)

[SerializableAttribute]
public abstract class EndPoint

備忘

EndPoint 類提供了一個表示網路資源或服務的 abstract 基類。子類組合網路連接資訊以構成服務的連接點。

繼承階層

System.Object
System.Net.EndPoint
System.Net.IPEndPoint

Socket.Bind 方法

使 Socket與一個本地終結點相關聯。

命名空間:  System.Net.Sockets
程式集:  System(在 System.dll 中)

public void Bind(EndPoint localEP )
參數
localEP
類型:System.Net.EndPoint

要與 Socket關聯的本地 EndPoint。

異常
ArgumentNullException

localEP 為 nullNothingnullptrnull 引用(在 Visual Basic 中為 Nothing)。

SocketException

試圖訪問通訊端時發生錯誤。有關更多資訊,請參見備忘部分。

ObjectDisposedException

Socket已關閉。

SecurityException

呼叫堆疊上部的調用方無權執行所請求的操作。

備忘

如果需要使用特定的本地終結點,請使用 Bind 方法。必須先調用 Bind,然後才能調用 Listen方法。除非需要使用特定的本地終結點,否則不必在使用 Connect方法之前調用 Bind。對無串連和連線導向的協議都可以使用 Bind 方法。

在調用 Bind 之前,必須首先建立打算從其進行資料通訊的本地 IPEndPoint。如果您不介意分配哪個本地地址,則可以用 IPAddress.Any作為地址參數建立一個 IPEndPoint,這樣,基礎服務提供者將會分配最適合的網路地址。如果您有多個網路介面,這將有助於簡化您的應用程式。如果您不介意使用哪個本地連接埠,則可以建立一個使用 0 作為連接埠號碼的 IPEndPoint。在這種情況下,服務提供者將會分配一個可用的連接埠號碼(介於 1024 和 5000 之間)。

如果使用上面的方法,您可以通過調用 LocalEndPoint獲知所分配的本網地址和連接埠號碼。如果當前使用的是連線導向的協議,則直到您調用了 Connect或 EndConnect方法後,LocalEndPoint才會返回本地分配的網路地址。如果當前使用的是無連線協定,則直到完成一個發送或接收操作後,才可訪問該資訊。

注意:

如果打算接收多路廣播的資料報,則必須使用多路廣播連接埠號碼調用 Bind 方法。

注意:

如果打算通過使用 ReceiveFrom方法來接收不需連線的資料報,則必須調用 Bind 方法。

注意:

如果在調用 Bind 方法時接收到 SocketException,則可以使用 SocketException.ErrorCode屬性擷取特定的錯誤碼。擷取此代碼後,您可以參考 MSDN Library 中的 Windows Sockets 第 2 版 API 錯誤碼文檔,擷取有關該錯誤的詳細說明。

注意:

當在應用程式中啟用網路跟蹤功能後,此成員將輸出跟蹤資訊。有關更多資訊,請參見 網路跟蹤。

Socket.Listen 方法

將 Socket置於偵聽狀態。

命名空間:  System.Net.Sockets
程式集:  System(在 System.dll 中)

public void Listen(
int backlog
) 參數
backlog
類型:System.Int32

掛起串連隊列的最大長度。

異常
SocketException

試圖訪問通訊端時發生錯誤。有關更多資訊,請參見備忘部分。

ObjectDisposedException

Socket已關閉。

備忘

Listen 可以讓一個連線導向的 Socket偵聽傳入的串連嘗試。backlog 參數指定隊列中最多可容納的等待接受的傳入串連數。若要確定可指定的最大串連數,請檢索 MaxConnections值。Listen 不會阻止。

如果收到 SocketException,請使用 ErrorCode屬性擷取特定的錯誤碼。擷取此代碼後,您可以參考 MSDN Library 中的 Windows Sockets 第 2 版 API 錯誤碼文檔,擷取有關該錯誤的詳細說明。可使用 Accept或BeginAccept來接受來自隊列的串連。

注意:

在調用 Listen 之前,必須首先調用 Bind方法,否則 Listen 將引發 SocketException。

注意:

當在應用程式中啟用網路跟蹤功能後,此成員將輸出跟蹤資訊。有關更多資訊,請參見 網路跟蹤。

注意:

根據作業系統的不同,backlog 參數被限制為不同的值。您可以指定更大的值,但 backlog 將受作業系統的限制。

 

Socket.BeginAccept 方法

開始一個非同步作業來接受一個傳入的串連嘗試。

重載列表

BeginAccept(AsyncCallback, Object)
開始一個非同步作業來接受一個傳入的串連嘗試。

BeginAccept(Int32, AsyncCallback, Object)
開始非同步作業以接受傳入的串連嘗試並接收用戶端應用程式發送的第一個資料區塊。

BeginAccept(Socket, Int32, AsyncCallback, Object)
開始非同步作業以接受從指定通訊端傳入的串連嘗試並接收用戶端應用程式發送的第一個資料區塊。

命名空間:  System.Net.Sockets
程式集:  System(在 System.dll 中)

文法
[HostProtectionAttribute(SecurityAction.LinkDemand, ExternalThreading = true)] public IAsyncResult BeginAccept( AsyncCallback callback, Object state )
參數
callback
類型:System.AsyncCallback

AsyncCallback 委託。

state
類型:System.Object

一個對象,它包含此請求的狀態資訊。

傳回值

類型:System.IAsyncResult

一個 IAsyncResult,它引用非同步 Socket建立。

異常

 

ObjectDisposedException

Socket對象已關閉。

NotSupportedException

此方法需要 Windows NT。

InvalidOperationException

正在接受的通訊端不會偵聽串連。在調用 BeginAccept之前必須調用 Bind和 Listen。

- 或 -

已接受的通訊端是綁定的。

ArgumentOutOfRangeException

receiveSize 小於 0。

SocketException

試圖訪問通訊端時發生錯誤。有關更多資訊,請參見備忘部分。

備忘

注意:

應用到此 的 HostProtectionAttribute 屬性 (attribute) 具有以下 Resources 屬性 (property) 值:ExternalThreading。HostProtectionAttribute 不影響傳統型應用程式(這些應用程式通常通過雙擊表徵圖、鍵入命令或在瀏覽器中輸入 URL 來啟動)。有關更多資訊,請參見 HostProtectionAttribute 類或 SQL Server 編程和宿主保護屬性。

連線導向的協議可以使用 BeginAccept方法來非同步處理傳入的串連嘗試。以非同步方式接受串連將使您能夠在單獨的執行線程中發送和接收資料。在調用 BeginAccept方法之前,必須調用 Listen方法來偵聽傳入的串連請求,並將偵聽到的請求放入隊列中。

必須建立實現 AsyncCallback 委託的回調方法,並將其名稱傳遞給 BeginAccept方法。若要實現這一點,至少必須通過 state 參數將實施偵聽的 Socket對象傳遞給 BeginAccept。如果您的回調需要更多資訊,則可以建立一個小型類來儲存 Socket和其他必需的資訊。通過 state 參數將此類的一個執行個體傳遞給 BeginAccept方法。

回調方法應調用 EndAccept方法。應用程式調用 BeginAccept時,系統會使用單獨的線程執行指定的回調方法,並在 EndAccept上一直處於阻止狀態,直到檢索到掛起的串連。EndAccept將會返回新的 Socket對象,供您用來向遠程主機發送資料和從遠程主機接收資料。不能使用返回的這個 Socket接受串連隊列中的任何附加串連。如果想要在調用 BeginAccept方法後使原始線程阻止,請使用 WaitHandle..::.WaitOne。當需要原始線程繼續執行時,請在回調方法中調用 ManualResetEvent 的 Set 方法。有關編寫回調方法的其他資訊,請參見 Callback 樣本。

注意:

可以調用返回的 Socket的 RemoteEndPoint方法來標識遠程主機的網路地址和連接埠號碼。

注意:

如果收到 SocketException,請使用 SocketException..::.ErrorCode屬性擷取特定的錯誤碼。擷取此代碼後,可以參考 MSDN 中的 Windows Sockets 第 2 版 API 錯誤碼文檔,擷取有關此錯誤的詳細說明。

注意:

當在應用程式中啟用網路跟蹤功能後,此成員將輸出跟蹤資訊。有關更多資訊,請參見 網路跟蹤。

注意:

執行內容(安全上下文、類比使用者及調用上下文)會被緩衝,以用於 Socket非同步方法呼叫。在首次使用一個特定上下文(特定 Socket非同步方法呼叫、特定 Socket執行個體及特定回調)後,該內容相關的後續使用將得到效能改

Socket.EnableBroadcast 屬性

擷取或設定一個 Boolean 值,該值指定 Socket是否可以發送或接收廣播資料包。

命名空間:  System.Net.Sockets
程式集:  System(在 System.dll 中)

文法
public bool EnableBroadcast { get; set; }
屬性值

類型:System.Boolean

如果 Socket允許廣播資料包,則為 true;否則為 false。預設為 false。

異常

SocketException

此選項僅對資料通訊端有效。

ObjectDisposedException

Socket已關閉。

備忘

廣播僅限於特定子網,並且必須使用使用者資料包通訊協定 (UDP)。對於 網際網路通訊協定 (IP)版本 4,可通過向 255.255.255.255 發送資料包來向本地子網廣播;也可以使用定向廣播位址,即 網際網路通訊協定 (IP) (IP) 地址的網路部分,同時所有位都在主機部分設定。例如,如果 IP 位址是 192.168.1.40(C 類地址,網路遮罩為 255.255.255.0,網路部分是前三個八位元,主機部分是最後一個八位元),則您的定向廣播位址是 192.168.1.255。

對傳輸控制通訊協定 (TCP) 通訊端設定此屬性不起任何作用。

C# Socket 編程

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.