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



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

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

System.Net.Sockets.SocketException(0x80004005(:地址已在使用

和这在另一个线程中:

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

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

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

编辑:当我删除时,TCP侦听器运行完美

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

第二版:我有

Thread.Sleep

在我的主线程上。如果我用替换它

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

我目前还不知道数据传输

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

TcpClient(IPEndPoint(
初始化TcpClient类的新实例并将其绑定到指定的本地终结点。

您可能想要的是:

TcpClient(String,Int32(
初始化TcpClient类的新实例并连接到指定主机上的指定端口。

请参阅TcpClient构造函数

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

最新更新