.NET Framework 4.6 and 4.5

实现 Berkeley 套接字接口。

 

命名空间:  System.Net.Sockets
程序集:  System(在 System.dll 中)
语法
 
 
public class Socket : IDisposable

Socket 类型公开以下成员。

显示: 
  名称 说明
Socket(SocketInformation) Socket 类的新实例。
Socket(SocketType, ProtocolType) Socket 类的新实例。
Socket(AddressFamily, SocketType, ProtocolType) Socket 类的新实例。
页首

属性

 
显示: 
  名称 说明
AddressFamily Socket 的地址族。
Available 获取已经从网络接收且可供读取的数据量。
Blocking Socket 是否处于阻止模式。
Connected Receive 操作时是否连接到远程主机。
DontFragment Socket 是否允许将 Internet 协议 (IP) 数据报分段。
DualMode Socket 是否是用于 IPv4 和 IPv6 的双模式套接字。
EnableBroadcast Socket 是否可以发送或接收广播数据包。
ExclusiveAddressUse Socket 是否仅允许一个进程绑定到端口。
Handle Socket 的操作系统句柄。
IsBound Socket 是否绑定到特定本地端口。
LingerState Socket 在尝试发送所有挂起数据时是否延迟关闭套接字。
LocalEndPoint 获取本地终结点。
MulticastLoopback 获取或设置一个值,该值指定传出的多路广播数据包是否传递到发送应用程序。
NoDelay Socket 是否正在使用 Nagle 算法。
OSSupportsIPv4 指示基础操作系统和网络适配器是否支持 Internet 协议第 4 版 (IPv4)。
OSSupportsIPv6 指示基础操作系统和网络适配器是否支持 Internet 协议第 6 版 (IPv6)。
ProtocolType Socket 的协议类型。
ReceiveBufferSize Socket 接收缓冲区的大小。
ReceiveTimeout Receive 调用将超时的时间长度。
RemoteEndPoint 获取远程终结点。
SendBufferSize Socket 发送缓冲区的大小。
SendTimeout Send 调用将超时的时间长度。
SocketType Socket 的类型。
SupportsIPv4 已过时。获取一个值,该值指示在当前主机上 IPv4 支持是否可用并且已启用。
SupportsIPv6 已过时。Dns 成员是否支持 IPv6。
Ttl Socket 发送的 Internet 协议 (IP) 数据包的生存时间 (TTL) 值。
UseOnlyOverlappedIO 指定套接字是否应仅使用重叠 I/O 模式。
页首

方法

 
显示: 
  名称 说明
Accept Socket。
AcceptAsync 开始一个异步操作来接受一个传入的连接尝试。
BeginAccept(AsyncCallback, Object) 开始一个异步操作来接受一个传入的连接尝试。
BeginAccept(Int32, AsyncCallback, Object) 开始异步操作以接受传入的连接尝试并接收客户端应用程序发送的第一个数据块。
BeginAccept(Socket, Int32, AsyncCallback, Object) 开始异步操作以接受从指定套接字传入的连接尝试并接收客户端应用程序发送的第一个数据块。
BeginConnect(EndPoint, AsyncCallback, Object) 开始一个对远程主机连接的异步请求。
BeginConnect(IPAddress, Int32, AsyncCallback, Object) IPAddress 和端口号指定。
BeginConnect(IPAddress[], Int32, AsyncCallback, Object) IPAddress 数组和端口号指定。
BeginConnect(String, Int32, AsyncCallback, Object) 主机由主机名和端口号指定。
BeginDisconnect 开始异步请求从远程终结点断开连接。
BeginReceive(IList<ArraySegment<Byte>>, SocketFlags, AsyncCallback, Object) Socket 中异步接收数据。
BeginReceive(IList<ArraySegment<Byte>>, SocketFlags, SocketError, AsyncCallback, Object) Socket 中异步接收数据。
BeginReceive(Byte[], Int32, Int32, SocketFlags, AsyncCallback, Object) Socket 中异步接收数据。
BeginReceive(Byte[], Int32, Int32, SocketFlags, SocketError, AsyncCallback, Object) Socket 中异步接收数据。
BeginReceiveFrom 开始从指定网络设备中异步接收数据。
BeginReceiveMessageFrom SocketFlags 将指定字节数的数据异步接收到数据缓冲区的指定位置,然后存储终结点和数据包信息。
BeginSend(IList<ArraySegment<Byte>>, SocketFlags, AsyncCallback, Object) Socket。
BeginSend(IList<ArraySegment<Byte>>, SocketFlags, SocketError, AsyncCallback, Object) Socket。
BeginSend(Byte[], Int32, Int32, SocketFlags, AsyncCallback, Object) Socket。
BeginSend(Byte[], Int32, Int32, SocketFlags, SocketError, AsyncCallback, Object) Socket。
BeginSendFile(String, AsyncCallback, Object) Socket 对象。
BeginSendFile(String, Byte[], Byte[], TransmitFileOptions, AsyncCallback, Object) Socket 对象。
BeginSendTo 向特定远程主机异步发送数据。
Bind Socket 与一个本地终结点相关联。
CancelConnectAsync 取消一个对远程主机连接的异步请求。
Close() Socket 连接并释放所有关联的资源。
Close(Int32) Socket 连接并释放与指定超时关联的所有资源以允许发送排队数据。
Connect(EndPoint) 建立与远程主机的连接。
Connect(IPAddress, Int32) 主机由 IP 地址和端口号指定。
Connect(IPAddress[], Int32) 主机由 IP 地址的数组和端口号指定。
Connect(String, Int32) 主机由主机名和端口号指定。
ConnectAsync(SocketAsyncEventArgs) 开始一个对远程主机连接的异步请求。
ConnectAsync(SocketType, ProtocolType, SocketAsyncEventArgs) 开始一个对远程主机连接的异步请求。
Disconnect 关闭套接字连接并允许重用套接字。
DisconnectAsync 开始异步请求从远程终结点断开连接。
Dispose() Socket 类的当前实例占用的所有资源。
Dispose(Boolean) Socket 使用的非托管资源,并可根据需要释放托管资源。
DuplicateAndClose 重复目标进程的套接字引用,并关闭此进程的套接字。
EndAccept(IAsyncResult) Socket 来处理远程主机通信。
EndAccept(Byte[], IAsyncResult) 此方法返回包含所传输的初始数据的缓冲区。
EndAccept(Byte[], Int32, IAsyncResult) 此方法返回一个缓冲区,其中包含初始数据和传输的字节数。
EndConnect 结束挂起的异步连接请求。
EndDisconnect 结束挂起的异步断开连接请求。
EndReceive(IAsyncResult) 结束挂起的异步读取。
EndReceive(IAsyncResult, SocketError) 结束挂起的异步读取。
EndReceiveFrom 结束挂起的、从特定终结点进行异步读取。
EndReceiveMessageFrom EndReceiveFrom 的更多信息。
EndSend(IAsyncResult) 结束挂起的异步发送。
EndSend(IAsyncResult, SocketError) 结束挂起的异步发送。
EndSendFile 结束文件的挂起异步发送。
EndSendTo 结束挂起的、向指定位置进行的异步发送。
Equals(Object) Object。)
Finalize Object.Finalize()。)
GetHashCode Object。)
GetSocketOption(SocketOptionLevel, SocketOptionName) Socket 选项的值,表示为一个对象。
GetSocketOption(SocketOptionLevel, SocketOptionName,Byte[]) Socket 选项设置,表示为字节数组。
GetSocketOption(SocketOptionLevel, SocketOptionName, Int32) Socket 选项的值。
GetType Object。)
IOControl(Int32, Byte[], Byte[]) Socket 设置低级操作模式。
IOControl(IOControlCode, Byte[], Byte[]) Socket 设置低级操作模式。
Listen Socket 置于侦听状态。
MemberwiseClone Object。)
Poll Socket 的状态。
Receive(IList<ArraySegment<Byte>>) Socket 接收数据,将数据存入接收缓冲区列表中。
Receive(Byte[]) Socket 套接字接收数据,将数据存入接收缓冲区。
Receive(IList<ArraySegment<Byte>>, SocketFlags) Socket 接收数据,将数据存入接收缓冲区列表中。
Receive(Byte[], SocketFlags) Socket 接收数据,将数据存入接收缓冲区。
Receive(IList<ArraySegment<Byte>>, SocketFlags, SocketError) Socket 接收数据,将数据存入接收缓冲区列表中。
Receive(Byte[], Int32, SocketFlags) Socket 接收指定字节数的数据,并将数据存入接收缓冲区。
Receive(Byte[], Int32, Int32, SocketFlags) Socket 接收指定的字节数,存入接收缓冲区的指定偏移量位置。
Receive(Byte[], Int32, Int32, SocketFlags, SocketError) Socket 接收数据,将数据存入接收缓冲区。
ReceiveAsync Socket 对象中接收数据。
ReceiveFrom(Byte[], EndPoint) 将数据报接收到数据缓冲区并存储终结点。
ReceiveFrom(Byte[], SocketFlags, EndPoint) SocketFlags 将数据报接收到数据缓冲区并存储终结点。
ReceiveFrom(Byte[], Int32, SocketFlags, EndPoint) SocketFlags 将指定的字节数接收到数据缓冲区并存储终结点。
ReceiveFrom(Byte[], Int32, Int32, SocketFlags, EndPoint) SocketFlags 将指定字节数的数据接收到数据缓冲区的指定位置并存储终结点。
ReceiveFromAsync 开始从指定网络设备中异步接收数据。
ReceiveMessageFrom SocketFlags 将指定字节数的数据接收到数据缓冲区的指定位置,然后存储终结点和数据包信息。
ReceiveMessageFromAsync SocketAsyncEventArgs.SocketFlags 将指定字节数的数据异步接收到数据缓冲区的指定位置,并存储终结点和数据包信息。
Select 确定一个或多个套接字的状态。
Send(IList<ArraySegment<Byte>>) Socket。
Send(Byte[]) Socket。
Send(IList<ArraySegment<Byte>>, SocketFlags) Socket。
Send(Byte[], SocketFlags) Socket。
Send(IList<ArraySegment<Byte>>, SocketFlags, SocketError) Socket。
Send(Byte[], Int32, SocketFlags) Socket。
Send(Byte[], Int32, Int32, SocketFlags) Socket(从指定的偏移量开始)。
Send(Byte[], Int32, Int32, SocketFlags, SocketError) Socket。
SendAsync Socket 对象。
SendFile(String) Socket 对象。
SendFile(String, Byte[], Byte[], TransmitFileOptions) Socket 对象。
SendPacketsAsync Socket 对象。
SendTo(Byte[], EndPoint) 将数据发送到指定的终结点。
SendTo(Byte[], SocketFlags, EndPoint) SocketFlags,将数据发送到特定的终结点。
SendTo(Byte[], Int32, SocketFlags, EndPoint) SocketFlags,将指定字节数的数据发送到指定的终结点。
SendTo(Byte[], Int32, Int32, SocketFlags, EndPoint) SocketFlags,将指定字节数的数据发送到指定终结点(从缓冲区中的指定位置开始)。
SendToAsync 向特定远程主机异步发送数据。
SetIPProtectionLevel 设置套接字的 IP 保护级别。
SetSocketOption(SocketOptionLevel, SocketOptionName, Boolean) Boolean 值。
SetSocketOption(SocketOptionLevel, SocketOptionName,Byte[]) Socket 选项设置为指定的值,表示为字节数组。
SetSocketOption(SocketOptionLevel, SocketOptionName, Int32) Socket 选项设置为指定的整数值。
SetSocketOption(SocketOptionLevel, SocketOptionName, Object) Socket 选项设置为指定值,表示为对象。
Shutdown Socket 上的发送和接收。
ToString Object。)
页首

备注

 

ProtocolType 枚举中所列出的任何一种协议执行异步和同步数据传输。

EndReceive 方法。

如果应用程序在执行期间只需要一个线程,请使用下面的方法,这些方法适用于同步操作模式。

  • Receive 方法。

  • SendTo 方法可将数据报发送到远程主机。

若要在执行过程中使用单独的线程处理通信,请使用下面的方法,这些方法适用于异步操作模式。

  • EndAccept 处理传入的连接请求。

  • EndReceiveFrom 来接收数据报。

如果对一个套接字执行多个异步操作,它们不一定按启动时的顺序完成。

Socket 关联的所有资源。

GetSocketOption 方法来检索这些设置。

说明

Socket 通信提供了更简单、对用户更友好的接口。

示例

 

接收到整个页前,此示例将一直处于阻止状态。

using System;
using System.Text;
using System.IO;
using System.Net;
using System.Net.Sockets;

public class GetSocket
{
    private static Socket ConnectSocket(string server, int port)
    {
        Socket s = null;
        IPHostEntry hostEntry = null;

        // Get host related information.
        hostEntry = Dns.GetHostEntry(server);

        // Loop through the AddressList to obtain the supported AddressFamily. This is to avoid
        // an exception that occurs when the host IP Address is not compatible with the address family
        // (typical in the IPv6 case).
        foreach(IPAddress address in hostEntry.AddressList)
        {
            IPEndPoint ipe = new IPEndPoint(address, port);
            Socket tempSocket = 
                new Socket(ipe.AddressFamily, SocketType.Stream, ProtocolType.Tcp);

            tempSocket.Connect(ipe);

            if(tempSocket.Connected)
            {
                s = tempSocket;
                break;
            }
            else
            {
                continue;
            }
        }
        return s;
    }

    // This method requests the home page content for the specified server.
    private static string SocketSendReceive(string server, int port) 
    {
        string request = "GET / HTTP/1.1\r\nHost: " + server + 
            "\r\nConnection: Close\r\n\r\n";
        Byte[] bytesSent = Encoding.ASCII.GetBytes(request);
        Byte[] bytesReceived = new Byte[256];

        // Create a socket connection with the specified server and port.
        Socket s = ConnectSocket(server, port);

        if (s == null)
            return ("Connection failed");

        // Send request to the server.
        s.Send(bytesSent, bytesSent.Length, 0);  

        // Receive the server home page content.
        int bytes = 0;
        string page = "Default HTML page on " + server + ":\r\n";

        // The following will block until te page is transmitted.
        do {
            bytes = s.Receive(bytesReceived, bytesReceived.Length, 0);
            page = page + Encoding.ASCII.GetString(bytesReceived, 0, bytes);
        }
        while (bytes > 0);

        return page;
    }

    public static void Main(string[] args) 
    {
        string host;
        int port = 80;

        if (args.Length == 0)
            // If no server name is passed as argument to this program, 
            // use the current host name as the default.
            host = Dns.GetHostName();
        else
            host = args[0];

        string result = SocketSendReceive(host, port); 
        Console.WriteLine(result);
    }
}
 

此类的实例是线程安全的。

相关文章:

  • 2021-05-07
  • 2021-08-24
  • 2022-01-19
  • 2021-06-25
  • 2022-02-17
  • 2022-12-23
  • 2022-01-01
猜你喜欢
  • 2021-08-30
  • 2021-10-08
  • 2021-06-29
  • 2021-12-09
  • 2022-12-23
  • 2021-07-17
相关资源
相似解决方案