簡體   English   中英

通過 C# 中的 TCP Sockets 進行本地進程間通信

[英]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):地址已在使用中

這在另一個線程中:

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

我知道我不能在同一個端口上創建兩個 sockets,但我想要一件事,另一件事接收。

我想要實現的是本地 C# 和 Python 程序之間的進程間通信。 我選擇了 sockets 因為管道在 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)
初始化 TcpClient class 的新實例並將其綁定到指定的本地端點。

你可能想要的是這樣的:

TcpClient(字符串,Int32)
初始化 TcpClient class 的新實例並連接到指定主機上的指定端口。

請參閱TcpClient 構造函數

一些知識:客戶端也需要一個空閑端口。 通常它會綁定到一個隨機的空閑端口。 對於本地連接,需要兩個 sockets - 一個用於客戶端,一個用於服務器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM