1、前言
套接字(Sockets)是一种强大的通信方式,可以在同一台设备或网络上的不同设备之间进行通信。C# 和 C++ 都支持套接字编程,这使得在它们之间实现跨进程通信成为可能。本文将介绍如何通过套接字实现 C# 和 C++ 程序的跨进程通信,并附带完整的示例代码,供读者参考与调试。
2、什么是套接字(Sockets)?
套接字是一种支持网络通信的接口,它允许进程在不同的计算机或同一台计算机上相互通信。套接字提供了多种协议,其中最常用的 TCP 和 UDP 协议分别适合有序可靠和快速无序的数据传输。本文重点介绍 TCP 套接字,它保证数据传输的可靠性和有序性。
3、实现步骤
- C++ 服务器:创建 TCP 服务器端套接字,监听特定端口,接收并处理客户端请求。
- C# 客户端:连接到服务器的 IP 地址和端口,向服务器发送请求并接收响应。
4、示例代码
下面的代码展示了一个 C++ 服务器和 C# 客户端之间的跨进程通信实例。C++ 服务器通过套接字接收来自 C# 客户端的消息并进行回复。
C++ 服务器代码
使用 Windows 套接字 API(Winsock)来创建一个 TCP 服务器:
#include <winsock2.h>
#include <ws2tcpip.h>
#include <iostream>
#pragma comment(lib, "ws2_32.lib")
int main() {
WSADATA wsaData;
SOCKET serverSocket, clientSocket;
sockaddr_in serverAddr, clientAddr;
// 初始化 Winsock
if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) {
std::cerr << "WSAStartup failed. Error: " << WSAGetLastError() << std::endl;
return 1;
}
// 创建服务器套接字
serverSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (serverSocket == INVALID_SOCKET) {
std::cerr << "Failed to create socket. Error: " << WSAGetLastError