Socket 建構函式
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
初始化 Socket 類別的新執行個體。
多載
Socket(SafeSocketHandle) |
針對指定的通訊端控制代碼,將 Socket 類別的新執行個體初始化。 |
Socket(SocketInformation) |
使用從 Socket 傳回的指定值,初始化 DuplicateAndClose(Int32) 類別的新執行個體。 |
Socket(SocketType, ProtocolType) |
使用指定的通訊端類型和通訊協定,初始化 Socket 類別的新執行個體。 如果操作系統支援 IPv6,此建構函式會建立雙模式套接字;否則,它會建立 IPv4 套接字。 |
Socket(AddressFamily, SocketType, ProtocolType) |
使用指定的通訊協定家族 (Family)、通訊端類型和通訊協定,初始化 Socket 類別的新執行個體。 |
Socket(SafeSocketHandle)
- 來源:
- Socket.cs
- 來源:
- Socket.cs
- 來源:
- Socket.cs
針對指定的通訊端控制代碼,將 Socket 類別的新執行個體初始化。
public:
Socket(System::Net::Sockets::SafeSocketHandle ^ handle);
public Socket (System.Net.Sockets.SafeSocketHandle handle);
new System.Net.Sockets.Socket : System.Net.Sockets.SafeSocketHandle -> System.Net.Sockets.Socket
Public Sub New (handle As SafeSocketHandle)
參數
- handle
- SafeSocketHandle
Socket 物件將封裝之通訊端的通訊端控制代碼。
例外狀況
handle
為 null
。
handle
無效。
handle
不是通訊端,或無法存取之通訊端的相關資訊。
備註
這個方法會 Socket 以從提供 SafeSocketHandle的數據填入 實例。 不同的操作系統提供不同層級的支援,可查詢套接字句柄或檔案描述項,以取得其屬性和組態。 結果 Socket 實例上的某些公用 API 可能會根據作業系統而有所不同,例如 ProtocolType 和 Blocking。
適用於
Socket(SocketInformation)
- 來源:
- Socket.cs
- 來源:
- Socket.cs
- 來源:
- Socket.cs
使用從 Socket 傳回的指定值,初始化 DuplicateAndClose(Int32) 類別的新執行個體。
public:
Socket(System::Net::Sockets::SocketInformation socketInformation);
[System.Runtime.Versioning.SupportedOSPlatform("windows")]
public Socket (System.Net.Sockets.SocketInformation socketInformation);
public Socket (System.Net.Sockets.SocketInformation socketInformation);
[<System.Runtime.Versioning.SupportedOSPlatform("windows")>]
new System.Net.Sockets.Socket : System.Net.Sockets.SocketInformation -> System.Net.Sockets.Socket
new System.Net.Sockets.Socket : System.Net.Sockets.SocketInformation -> System.Net.Sockets.Socket
Public Sub New (socketInformation As SocketInformation)
參數
- socketInformation
- SocketInformation
DuplicateAndClose(Int32) 傳回的通訊端資訊。
- 屬性
備註
如果您使用與每個呼叫自變數相同的位元組陣列多次呼叫 Socket 建構函式,您將使用相同的基礎套接字建立多個 Managed Socket。 強烈建議您不要這樣做。
適用於
Socket(SocketType, ProtocolType)
- 來源:
- Socket.cs
- 來源:
- Socket.cs
- 來源:
- Socket.cs
使用指定的通訊端類型和通訊協定,初始化 Socket 類別的新執行個體。 如果操作系統支援 IPv6,此建構函式會建立雙模式套接字;否則,它會建立 IPv4 套接字。
public:
Socket(System::Net::Sockets::SocketType socketType, System::Net::Sockets::ProtocolType protocolType);
public Socket (System.Net.Sockets.SocketType socketType, System.Net.Sockets.ProtocolType protocolType);
new System.Net.Sockets.Socket : System.Net.Sockets.SocketType * System.Net.Sockets.ProtocolType -> System.Net.Sockets.Socket
Public Sub New (socketType As SocketType, protocolType As ProtocolType)
參數
- socketType
- SocketType
其中一個 SocketType 值。
- protocolType
- ProtocolType
其中一個 ProtocolType 值。
例外狀況
和 protocolType
的組合socketType
會導致無效的套接字。
備註
參數 socketType
會指定 類別的類型 Socket ,而 protocolType
參數會指定 所使用的 Socket通訊協定。 這兩個參數不獨立。 類型 Socket 通常隱含於通訊協定中。 如果型別和通訊協定型別的組合 Socket 導致無效 Socket,這個建構函式會 SocketException擲回 。
注意
如果這個建構函式擲回 SocketException,請使用 SocketException.ErrorCode 屬性來取得特定的錯誤碼。 取得此程式代碼之後,請參閱 Windows Sockets 第 2 版 API 錯誤碼 檔,以取得錯誤的詳細描述。
注意
在應用程式中啟用網路追蹤時,這個成員會輸出追蹤資訊。 如需詳細資訊,請參閱 .NET Framework 中的網路追蹤。
適用於
Socket(AddressFamily, SocketType, ProtocolType)
- 來源:
- Socket.cs
- 來源:
- Socket.cs
- 來源:
- Socket.cs
使用指定的通訊協定家族 (Family)、通訊端類型和通訊協定,初始化 Socket 類別的新執行個體。
public:
Socket(System::Net::Sockets::AddressFamily addressFamily, System::Net::Sockets::SocketType socketType, System::Net::Sockets::ProtocolType protocolType);
public Socket (System.Net.Sockets.AddressFamily addressFamily, System.Net.Sockets.SocketType socketType, System.Net.Sockets.ProtocolType protocolType);
new System.Net.Sockets.Socket : System.Net.Sockets.AddressFamily * System.Net.Sockets.SocketType * System.Net.Sockets.ProtocolType -> System.Net.Sockets.Socket
Public Sub New (addressFamily As AddressFamily, socketType As SocketType, protocolType As ProtocolType)
參數
- addressFamily
- AddressFamily
其中一個 AddressFamily 值。
- socketType
- SocketType
其中一個 SocketType 值。
- protocolType
- ProtocolType
其中一個 ProtocolType 值。
例外狀況
addressFamily
、socketType
和 protocolType
組合所產生的無效通訊端。
範例
下列程式代碼範例示範如何建立 類別的 Socket 實例。
#using <System.dll>
using namespace System;
using namespace System::Text;
using namespace System::IO;
using namespace System::Net;
using namespace System::Net::Sockets;
String^ DoSocketGet( String^ server )
{
//Set up variables and String to write to the server.
Encoding^ ASCII = Encoding::ASCII;
String^ Get = "GET / HTTP/1.1\r\nHost: ";
Get->Concat( server, "\r\nConnection: Close\r\n\r\n" );
array<Byte>^ByteGet = ASCII->GetBytes( Get );
array<Byte>^RecvBytes = gcnew array<Byte>(256);
String^ strRetPage = nullptr;
// IPAddress and IPEndPoint represent the endpoint that will
// receive the request.
// Get first IPAddress in list return by DNS.
try
{
// Define those variables to be evaluated in the next for loop and
// then used to connect to the server. These variables are defined
// outside the for loop to make them accessible there after.
Socket^ s = nullptr;
IPEndPoint^ hostEndPoint;
IPAddress^ hostAddress = nullptr;
int conPort = 80;
// Get DNS host information.
IPHostEntry^ hostInfo = Dns::Resolve( server );
// Get the DNS IP addresses associated with the host.
array<IPAddress^>^IPaddresses = hostInfo->AddressList;
// Evaluate the socket and receiving host IPAddress and IPEndPoint.
for ( int index = 0; index < IPaddresses->Length; index++ )
{
hostAddress = IPaddresses[ index ];
hostEndPoint = gcnew IPEndPoint( hostAddress,conPort );
// Creates the Socket to send data over a TCP connection.
s = gcnew Socket( AddressFamily::InterNetwork,SocketType::Stream,ProtocolType::Tcp );
// Connect to the host using its IPEndPoint.
s->Connect( hostEndPoint );
if ( !s->Connected )
{
// Connection failed, try next IPaddress.
strRetPage = "Unable to connect to host";
s = nullptr;
continue;
}
// Sent the GET request to the host.
s->Send( ByteGet, ByteGet->Length, SocketFlags::None );
}
// Receive the host home page content and loop until all the data is received.
Int32 bytes = s->Receive( RecvBytes, RecvBytes->Length, SocketFlags::None );
strRetPage = "Default HTML page on ";
strRetPage->Concat( server, ":\r\n", ASCII->GetString( RecvBytes, 0, bytes ) );
while ( bytes > 0 )
{
bytes = s->Receive( RecvBytes, RecvBytes->Length, SocketFlags::None );
strRetPage->Concat( ASCII->GetString( RecvBytes, 0, bytes ) );
}
}
catch ( SocketException^ e )
{
Console::WriteLine( "SocketException caught!!!" );
Console::Write( "Source : " );
Console::WriteLine( e->Source );
Console::Write( "Message : " );
Console::WriteLine( e->Message );
}
catch ( ArgumentNullException^ e )
{
Console::WriteLine( "ArgumentNULLException caught!!!" );
Console::Write( "Source : " );
Console::WriteLine( e->Source );
Console::Write( "Message : " );
Console::WriteLine( e->Message );
}
catch ( NullReferenceException^ e )
{
Console::WriteLine( "NULLReferenceException caught!!!" );
Console::Write( "Source : " );
Console::WriteLine( e->Source );
Console::Write( "Message : " );
Console::WriteLine( e->Message );
}
catch ( Exception^ e )
{
Console::WriteLine( "Exception caught!!!" );
Console::Write( "Source : " );
Console::WriteLine( e->Source );
Console::Write( "Message : " );
Console::WriteLine( e->Message );
}
return strRetPage;
}
int main()
{
Console::WriteLine( DoSocketGet( "localhost" ) );
}
using System;
using System.Text;
using System.IO;
using System.Net;
using System.Net.Sockets;
public class Sample
{
public static string DoSocketGet(string server)
{
//Set up variables and String to write to the server.
Encoding ASCII = Encoding.ASCII;
string Get = "GET / HTTP/1.1\r\nHost: " + server +
"\r\nConnection: Close\r\n\r\n";
Byte[] ByteGet = ASCII.GetBytes(Get);
Byte[] RecvBytes = new Byte[256];
String strRetPage = null;
// IPAddress and IPEndPoint represent the endpoint that will
// receive the request.
// Get first IPAddress in list return by DNS.
try
{
// Define those variables to be evaluated in the next for loop and
// then used to connect to the server. These variables are defined
// outside the for loop to make them accessible there after.
Socket s = null;
IPEndPoint hostEndPoint;
IPAddress hostAddress = null;
int conPort = 80;
// Get DNS host information.
IPHostEntry hostInfo = Dns.GetHostEntry(server);
// Get the DNS IP addresses associated with the host.
IPAddress[] IPaddresses = hostInfo.AddressList;
// Evaluate the socket and receiving host IPAddress and IPEndPoint.
for (int index=0; index<IPaddresses.Length; index++)
{
hostAddress = IPaddresses[index];
hostEndPoint = new IPEndPoint(hostAddress, conPort);
// Creates the Socket to send data over a TCP connection.
s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp );
// Connect to the host using its IPEndPoint.
s.Connect(hostEndPoint);
if (!s.Connected)
{
// Connection failed, try next IPaddress.
strRetPage = "Unable to connect to host";
s = null;
continue;
}
// Sent the GET request to the host.
s.Send(ByteGet, ByteGet.Length, 0);
} // End of the for loop.
// Receive the host home page content and loop until all the data is received.
Int32 bytes = s.Receive(RecvBytes, RecvBytes.Length, 0);
strRetPage = "Default HTML page on " + server + ":\r\n";
strRetPage = strRetPage + ASCII.GetString(RecvBytes, 0, bytes);
while (bytes > 0)
{
bytes = s.Receive(RecvBytes, RecvBytes.Length, 0);
strRetPage = strRetPage + ASCII.GetString(RecvBytes, 0, bytes);
}
} // End of the try block.
catch(SocketException e)
{
Console.WriteLine("SocketException caught!!!");
Console.WriteLine("Source : " + e.Source);
Console.WriteLine("Message : " + e.Message);
}
catch(ArgumentNullException e)
{
Console.WriteLine("ArgumentNullException caught!!!");
Console.WriteLine("Source : " + e.Source);
Console.WriteLine("Message : " + e.Message);
}
catch(NullReferenceException e)
{
Console.WriteLine("NullReferenceException caught!!!");
Console.WriteLine("Source : " + e.Source);
Console.WriteLine("Message : " + e.Message);
}
catch(Exception e)
{
Console.WriteLine("Exception caught!!!");
Console.WriteLine("Source : " + e.Source);
Console.WriteLine("Message : " + e.Message);
}
return strRetPage;
}
public static void Main()
{
Console.WriteLine(DoSocketGet("localhost"));
}
}
Imports System.Text
Imports System.IO
Imports System.Net
Imports System.Net.Sockets
_
Public Class Sample
Public Shared Function DoSocketGet(server As String) As String
'Set up variables and String to write to the server.
Dim ASCII As Encoding = Encoding.ASCII
Dim [Get] As String = "GET / HTTP/1.1" + ControlChars.Lf + ControlChars.NewLine + "Host: " + server + ControlChars.Lf + ControlChars.NewLine + "Connection: Close" + ControlChars.Lf + ControlChars.NewLine + ControlChars.Lf + ControlChars.NewLine
Dim ByteGet As [Byte]() = ASCII.GetBytes([Get])
Dim RecvBytes(256) As [Byte]
Dim strRetPage As [String] = Nothing
' IPAddress and IPEndPoint represent the endpoint that will
' receive the request.
' Get first IPAddress in list return by DNS.
Try
' Define those variables to be evaluated in the next for loop and
' then used to connect to the server. These variables are defined
' outside the for loop to make them accessible there after.
Dim s As Socket = Nothing
Dim hostEndPoint As IPEndPoint
Dim hostAddress As IPAddress = Nothing
Dim conPort As Integer = 80
' Get DNS host information.
Dim hostInfo As IPHostEntry = Dns.Resolve(server)
' Get the DNS IP addresses associated with the host.
Dim IPaddresses As IPAddress() = hostInfo.AddressList
' Evaluate the socket and receiving host IPAddress and IPEndPoint.
Dim index As Integer = 0
For index = 0 To IPaddresses.Length - 1
hostAddress = IPaddresses(index)
hostEndPoint = New IPEndPoint(hostAddress, conPort)
' Creates the Socket to send data over a TCP connection.
s = New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
' Connect to the host using its IPEndPoint.
s.Connect(hostEndPoint)
If Not s.Connected Then
' Connection failed, try next IPaddress.
strRetPage = "Unable to connect to host"
s = Nothing
GoTo ContinueFor1
End If
' Sent the GET request to the host.
s.Send(ByteGet, ByteGet.Length, 0)
ContinueFor1:
Next index ' End of the for loop.
' Receive the host home page content and loop until all the data is received.
'Dim bytes As Int32 = s.Receive(RecvBytes, RecvBytes.Length, 0)
Dim bytes As Int32 = s.Receive(RecvBytes, RecvBytes.Length, 0)
strRetPage = "Default HTML page on " + server + ":\r\n"
strRetPage = "Default HTML page on " + server + ":" + ControlChars.Lf + ControlChars.NewLine
Dim i As Integer
While bytes > 0
bytes = s.Receive(RecvBytes, RecvBytes.Length, 0)
strRetPage = strRetPage + ASCII.GetString(RecvBytes, 0, bytes)
End While
' End of the try block.
Catch e As SocketException
Console.WriteLine("SocketException caught!!!")
Console.WriteLine(("Source : " + e.Source))
Console.WriteLine(("Message : " + e.Message))
Catch e As ArgumentNullException
Console.WriteLine("ArgumentNullException caught!!!")
Console.WriteLine(("Source : " + e.Source))
Console.WriteLine(("Message : " + e.Message))
Catch e As NullReferenceException
Console.WriteLine("NullReferenceException caught!!!")
Console.WriteLine(("Source : " + e.Source))
Console.WriteLine(("Message : " + e.Message))
Catch e As Exception
Console.WriteLine("Exception caught!!!")
Console.WriteLine(("Source : " + e.Source))
Console.WriteLine(("Message : " + e.Message))
End Try
Return strRetPage
End Function 'DoSocketGet
Public Shared Sub Main()
Console.WriteLine(DoSocketGet("localhost"))
End Sub
End Class
備註
參數 addressFamily
會指定類別所使用的尋址配置 Socket 、 socketType
參數指定類別的類型 Socket ,而 protocolType
參數則指定 所使用的 Socket通訊協定。 這三個參數不獨立。 某些位址系列會限制哪些通訊協定可以搭配它們使用,而且類型 Socket 通常隱含在通訊協定中。 如果位址系列、 Socket 類型和通訊協定類型的組合導致無效 Socket,這個建構函式會 SocketException擲回 。
注意
如果這個建構函式擲回 SocketException,請使用 SocketException.ErrorCode 屬性來取得特定的錯誤碼。 取得此程式代碼之後,請參閱 Windows Sockets 第 2 版 API 錯誤碼 檔,以取得錯誤的詳細描述。
注意
在應用程式中啟用網路追蹤時,這個成員會輸出追蹤資訊。 如需詳細資訊,請參閱 .NET Framework 中的網路追蹤。