C# 无法与MacOS BigSur TCP服务器建立TCP连接
我正在尝试在本地连接的计算机之间建立TCP客户机-服务器连接(MacBook BigSur是正在运行的服务器,而Windows 10笔记本电脑充当客户机)。为此,我使用Visual Studio代码运行这两个应用程序,如下所示: 关于macOS:C# 无法与MacOS BigSur TCP服务器建立TCP连接,c#,macos,networking,.net-core,tcplistener,C#,Macos,Networking,.net Core,Tcplistener,我正在尝试在本地连接的计算机之间建立TCP客户机-服务器连接(MacBook BigSur是正在运行的服务器,而Windows 10笔记本电脑充当客户机)。为此,我使用Visual Studio代码运行这两个应用程序,如下所示: 关于macOS: Console.WriteLine("Starting build agent..."); var listener = new TcpListener(IPAddress.Parse("127.0.0.1")
Console.WriteLine("Starting build agent...");
var listener = new TcpListener(IPAddress.Parse("127.0.0.1"), 12345);
Console.WriteLine("Build agent Started ");
listener.Start();
while (true)
{
var fileName = $"s-{DateTime.Now.Ticks}.tar.gz";
using (var client = listener.AcceptTcpClient())
using (var stream = client.GetStream())
using (var output = File.Create(fileName))
{
Console.WriteLine("Client connected. Starting to receive the file...");
// read the file in chunks of 1KB
var buffer = new byte[1024];
int bytesRead;
while ((bytesRead = stream.Read(buffer, 0, buffer.Length)) > 0)
{
output.Write(buffer, 0, bytesRead);
}
Console.WriteLine("Client connected. File received successfuly.");
Console.WriteLine(Execute($"tar -xvf '{fileName}'"));
}
}
在Windows上:
var client = new TcpClient("192.168.0.109", 12345);
Byte[] data = File.ReadAllBytes(@"D:\shared\file.tar.gz");
NetworkStream stream = client.GetStream();
stream.Write(data, 0, data.Length);
Console.WriteLine("data sent.");
但是,当Windows客户端尝试建立连接时,它无法说:
System.Net.Internals.SocketExceptionFactory.ExtendedSocketException: 'No connection could be made because the target machine actively refused it. 192.168.0.109:12345'
请注意,在运行服务器后,我可以通过在终端中使用
sudolsof-I:123456
检查它,看到Visual Studio正在使用端口12345。此外,我的Mac设备正在使用端口192.168.0.109
,防火墙被禁用,我可以使用Windows命令提示符ping它。127.0.0.1
是本地主机,这意味着根据定义,服务器只能在同一主机上访问
如果你想让服务器监听所有接口,不要指定
IPAddress.Any
分别IPAddress.IPv6Any
或使用0.0.0.0.我不知道C#,但不会新的TcpListener(IPAddress.Loopback,12345)
只监听环回地址,不是192.168.0.109?谢谢@GordonDavisson这是一个复制粘贴错误。实际上,我正在使用侦听本地主机地址的IPAddress.Parse(“127.0.0.1”)
,我更新了问题的详细信息。127.0.0.1是本地主机,这意味着根据定义,服务器只能在同一主机上访问。如果您希望服务器侦听所有接口,请不要指定IP地址或使用0.0.0.0
@Robert,请发布一个答案,将其标记为有效