自学内容网 自学内容网

C#中Socket通信常用的方法

创建Socket

在C#中创建一个Socket对象的基本步骤如下:

  1. 引入命名空间: 首先,确保你的文件顶部包含了以下命名空间的引用:

    using System.Net;
    using System.Net.Sockets;
  2. 创建Socket实例: 你可以创建一个Socket实例,指定协议类型和套接字类型。例如,如果你想要创建一个IPv4的TCP套接字,你可以这样做:

    Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
    • AddressFamily.InterNetwork 表示使用IPv4。
    • SocketType.Stream 表示这是一个面向连接的套接字(如TCP)。
    • ProtocolType.Tcp 表示使用TCP协议。
  3. 绑定Socket: 如果你的服务端需要绑定到特定的端口和IP地址,你可以使用Bind方法:

    IPAddress localIP = IPAddress.Any; // 绑定到所有可用的网络接口
    int port = 11000; // 端口号
    socket.Bind(new IPEndPoint(localIP, port));
    
    IPEndPoint是.NET框架中的一个类,它表示一个Internet协议(IP)地址和端口号的组合,通常用于指定网络服务的端点。在Socket编程中,IPEndPoint用于绑定套接字到特定的IP地址和端口,或者作为远程服务端点的连接目标。
    
    以下是IPEndPoint的一些常用属性和方法:
    
    属性
    Address: 获取或设置IPEndPoint的IP地址。
    Port: 获取或设置IPEndPoint的端口号。
    构造函数
    IPEndPoint(IPAddress address, int port): 创建一个新的IPEndPoint实例,使用指定的IP地址和端口号。
  4. 监听连接: 在服务端,你需要监听传入的连接请求:

    int backlog = 100; // 等待队列的长度
    socket.Listen(backlog);
  5. 接受连接: 服务端使用Accept方法接受连接,这将返回一个新的Socket用于与客户端通信:

    Socket clientSocket = socket.Accept();
  6. 连接到服务端: 对于客户端,使用Connect方法连接到服务端:

    IPAddress serverIP = IPAddress.Parse("127.0.0.1"); // 服务端的IP地址
    int port = 11000; // 服务端的端口号
    socket.Connect(new IPEndPoint(serverIP, port));
  7. 发送和接收数据: 一旦建立了连接,就可以使用SendReceive方法来发送和接收数据:

    byte[] buffer = Encoding.ASCII.GetBytes("Hello, World!");
    int bytesSent = socket.Send(buffer);
    
    byte[] receiveBuffer = new byte[1024];
    int bytesReceived = socket.Receive(receiveBuffer);
    string receivedText = Encoding.ASCII.GetString(receiveBuffer, 0, bytesReceived);
  8. 关闭Socket: 完成通信后,应该关闭Socket

    socket.Shutdown(SocketShutdown.Both);
    socket.Close();

C#中Socket通信常用的方法 

在C#中,使用System.Net.Sockets命名空间下的Socket类可以实现网络通信。以下是一些常用的方法和概念:

  1. 创建Socket

    • Socket(): 创建一个未绑定的套接字。
  2. 绑定Socket

    • Bind(IPAddress localAddress, int port): 将套接字绑定到本地IP地址和端口。
  3. 监听连接

    • Listen(int backlog): 开始监听传入连接请求,backlog参数指定等待队列中的最大连接数。
  4. 接受连接

    • Accept(): 接受传入的连接请求,返回一个新的套接字用于与客户端通信。
  5. 连接到服务端

    • Connect(IPAddress remoteAddress, int port): 客户端使用,连接到指定的IP地址和端口的服务端。
  6. 发送数据

    • Send(byte[] buffer, int size, SocketFlags flags): 向连接的远程主机发送数据。
    • SendTo(byte[] buffer, int size, SocketFlags flags, EndPoint remoteEP): 向指定的远程主机发送数据。
  7. 接收数据

    • Receive(byte[] buffer, int size, SocketFlags flags): 接收来自连接的远程主机的数据。
    • ReceiveFrom(byte[] buffer, int size, SocketFlags flags, ref EndPoint remoteEP): 从任何远程主机接收数据。
  8. 异步发送数据

    • BeginSend(byte[] buffer, int offset, int size, SocketFlags flags, AsyncCallback callback, object state): 开始异步发送数据。
  9. 异步接收数据

    • BeginReceive(byte[] buffer, int offset, int size, SocketFlags flags, AsyncCallback callback, object state): 开始异步接收数据。
  10. 关闭Socket

    • Close(): 关闭套接字。
    • Shutdown(SocketShutdown how): 禁用套接字的接收和/或发送操作。
  11. 错误处理

    • Poll(int microseconds, SelectMode mode): 检查套接字的状态。
    • Select(ICollection checkRead, ICollection checkWrite, ICollection checkError, int microSeconds): 检查一个或多个套接字是否有待处理的输入/输出/错误。
  12. 获取套接字选项

    • GetSocketOption(SocketOptionLevel level, SocketOptionName name): 获取套接字的选项值。
  13. 设置套接字选项

    • SetSocketOption(SocketOptionLevel level, SocketOptionName name, bool value): 设置套接字的选项。
  14. 获取和设置超时

    • SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout, int timeout): 设置接收超时。
    • SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.SendTimeout, int timeout): 设置发送超时。
  15. 获取和设置缓冲区大小

    • SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.SendBuffer, int size): 设置发送缓冲区大小。
    • SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveBuffer, int size): 设置接收缓冲区大小。
  16. 非阻塞模式

    • Blocking = false: 设置套接字为非阻塞模式。
  17. 处理连接的状态变化

    • Connected: 检查套接字是否已连接。
    • Disconnected: 检查套接字是否已断开连接。
  18. 获取远程和本地端点

    • RemoteEndPoint: 获取远程端点。
    • LocalEndPoint: 获取本地端点。

原文地址:https://blog.csdn.net/weixin_64532720/article/details/142620084

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!