在 C# 中通过 TCP 套接字进行本地进程间通信

Local Inter-process Communication via TCP Sockets in C#

我在一个线程中执行此操作时出现异常:

var listener = new TcpListener(new IPEndPoint("127.0.0.1", 3536));
listener.Start();

System.Net.Sockets.SocketException (0x80004005): Address already in use

这在另一个线程中:

var client = new TcpClient(new IPEndPoint("127.0.0.1", 3536));

我知道我不能在同一个端口上创建两个套接字,但我想要一个东西,另一个接收。

我想要实现的是本地 C# 和 Python 程序之间的进程间通信。我选择了套接字,因为管道在 Windows 和 Unix 系统上的工作方式不同,我希望有可能将一个程序外包给另一台机器。

编辑:当我删除

时,TCP 侦听器运行完美
var client = new TcpClient(new IPEndPoint("127.0.0.1", 3536));

Edit2:我有一个

Thread.Sleep

在我的主线程上。如果我用

替换它
while (!client.Connected) client.Connect(ipEndPoint)
Console.WriteLine(client.Connected) // this reaches

我目前还不知道数据传输

您使用了错误的构造函数。

TcpClient(IPEndPoint)
Initializes a new instance of the TcpClient class and binds it to the specified local endpoint.

您可能想要的是:

TcpClient(String, Int32)
Initializes a new instance of the TcpClient class and connects to the specified port on the specified host.

TcpClient constructors

一些知识:客户端也需要一个空闲端口。通常它会绑定到一个随机的自由端口。对于本地连接,需要两个套接字 - 一个用于客户端,一个用于服务器。