SOCKET 通讯c#对应 c++ 中的类型

在网络编程中,Socket(套接字)通信是实现不同程序或设备之间数据交换的基础。无论是 C# 还是 C++,都可以使用 Socket API 来实现网络通信。下面对比一下 C# 和 C++ 中的 Socket 类型和相关操作:

C# 中的 Socket(System.Net.Sockets.Socket)

  1. 类型和操作

    • 在 C# 中,Socket 类位于 System.Net.Sockets 命名空间下。
    • 可以创建 TCP 或 UDP Socket,通过 SocketType.StreamSocketType.Dgram 分别指定。
    • 提供 Socket.Connect()Socket.Accept()Socket.Send()Socket.Receive() 等方法来建立连接、接受连接和发送接收数据。
  2. 示例代码

    csharp
    using System; using System.Net; using System.Net.Sockets; class Program { static void Main() { Socket listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); IPAddress ipAddress = IPAddress.Parse("127.0.0.1"); IPEndPoint localEndPoint = new IPEndPoint(ipAddress, 12345); listener.Bind(localEndPoint); listener.Listen(10); Console.WriteLine("Waiting for a connection..."); Socket handler = listener.Accept(); string data = null; byte[] bytes = new byte[1024]; int bytesRec = handler.Receive(bytes); data += Encoding.ASCII.GetString(bytes, 0, bytesRec); Console.WriteLine($"Received: {data}"); handler.Shutdown(SocketShutdown.Both); handler.Close(); } }

C++ 中的 Socket(Windows 下的 Winsock,Linux 下的 BSD Sockets)

  1. 类型和操作

    • 在 C++ 中,Socket 编程通常使用 Winsock API(Windows)或 BSD Sockets API(Linux)。
    • 可以创建 TCP 或 UDP 套接字,使用 socket() 函数指定协议族、类型和协议。
    • 使用 bind()listen()accept()send()recv() 函数来绑定地址、监听连接、接受连接以及发送接收数据。
  2. 示例代码(基于 Windows 的 Winsock API):

    cpp
    #include <iostream> #include <winsock2.h> int main() { WSADATA wsaData; SOCKET listener; SOCKET handler; struct sockaddr_in serverAddr; struct sockaddr_in clientAddr; int clientAddrLen = sizeof(clientAddr); char buffer[1024] = {0}; int bytesRec; // Initialize Winsock WSAStartup(MAKEWORD(2, 2), &wsaData); // Create socket listener = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); serverAddr.sin_family = AF_INET; serverAddr.sin_addr.s_addr = INADDR_ANY; serverAddr.sin_port = htons(12345); // Bind socket bind(listener, (sockaddr*)&serverAddr, sizeof(serverAddr)); // Listen for incoming connections listen(listener, SOMAXCONN); std::cout << "Waiting for a connection..." << std::endl; handler = accept(listener, (sockaddr*)&clientAddr, &clientAddrLen); // Receive data bytesRec = recv(handler, buffer, sizeof(buffer), 0); std::cout << "Received: " << buffer << std::endl; // Shutdown and close socket shutdown(handler, SD_BOTH); closesocket(handler); closesocket(listener); // Cleanup Winsock WSACleanup(); return 0; }

总结:

无论是在 C# 还是 C++ 中,Socket 编程的基本概念和操作都是类似的,主要差异在于具体的 API 使用和语法风格。在实现网络通信时,需要根据具体的需求选择适合的编程语言和相应的网络库或API。

关键字提取: Socket通信, C#, C++, Winsock, BSD Sockets, System.Net.Sockets.Socket, socket(), bind(), listen(), accept(), send(), recv()