在 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.
一些知识:客户端也需要一个空闲端口。通常它会绑定到一个随机的自由端口。对于本地连接,需要两个套接字 - 一个用于客户端,一个用于服务器。
我在一个线程中执行此操作时出现异常:
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.
一些知识:客户端也需要一个空闲端口。通常它会绑定到一个随机的自由端口。对于本地连接,需要两个套接字 - 一个用于客户端,一个用于服务器。