为什么不是';我的.NET核心服务器应用程序在Ubuntu中接受连接,但在Windows中工作正常吗?

为什么不是';我的.NET核心服务器应用程序在Ubuntu中接受连接,但在Windows中工作正常吗?,ubuntu,networking,.net-core,tcpclient,Ubuntu,Networking,.net Core,Tcpclient,所以,我基本上有一个服务器和一个客户端 服务器是一个.NET Core 2.2控制台应用程序,它在连接打开后侦听传入的连接,读取请求,从MySQL数据库中提取一些数据,并将其发送回客户端 客户端是一个Xamarin表单应用程序,它将这些请求发送到服务器。没什么复杂的 现在,如果我在本地Windows计算机上运行服务器,它将开始侦听分配的端口,并正确地接受请求和发送响应。然而,当我将它部署到运行这个服务器应用程序的Ubuntu19.04机器上时,它根本看不到传入的连接 当然,我确保这不是一个网络问

所以,我基本上有一个服务器和一个客户端

服务器是一个.NET Core 2.2控制台应用程序,它在连接打开后侦听传入的连接,读取请求,从MySQL数据库中提取一些数据,并将其发送回客户端

客户端是一个Xamarin表单应用程序,它将这些请求发送到服务器。没什么复杂的

现在,如果我在本地Windows计算机上运行服务器,它将开始侦听分配的端口,并正确地接受请求和发送响应。然而,当我将它部署到运行这个服务器应用程序的Ubuntu19.04机器上时,它根本看不到传入的连接

当然,我确保这不是一个网络问题,我尝试将netcat(
nc-l PORT
)连接到相关端口,并且它正在接收正确的数据

这是我的服务器代码:

公共静态类服务器
{
公共静态字典会话{get;private set;}=new Dictionary();
公共静态int Main(字符串[]args)
{
返回RunServer();
}
私有静态int RunServer()
{
var listener=new TcpListener(IPAddress.Loopback,ServerConfig.Port);
int errorCode=0;
尝试
{
listener.Start();
Console.WriteLine(“正在运行的服务器-正在侦听“+ServerConfig.Port+”);//这是在Ubuntu中打印的
while(true)
{
var clientTask=listener.AcceptTcpClientAsync();
if(clientTask.Result!=null)
{
使用(TcpClient TcpClient=clientTask.Result)
{
//这一行是在Windows/localhost中打印的,但不是在Ubuntu生产机器上
WriteLine(“连接到{0}”,(tcpClient.Client.RemoteEndPoint作为IPEndPoint.Address);
字符串数据;
字符串cmd;
字符串[]参数;
字符串响应=null;
NetworkStream=tcpClient.GetStream();
data=ReceiveRemoteMessage(stream);//见下文
if(string.IsNullOrWhiteSpace(数据))
继续;
参数=data.Split(“”);
cmd=参数[0];
尝试
{
//注意:实际处理请求的CommunicationManager类与此问题无关,因此不包括在内
string methodName=“Manage”+cmd+“Request”;
var argList=新列表();
var i=0;
对象(参数中的对象PAR)
{
i++;
如果(i==1)
继续;
argList.Add(par);
}
对象[]args=argList.ToArray();
response=(字符串)typeof(CommunicationManager).GetMethod(methodName).Invoke(null,args);
}
捕获(例外e)
{
如果(e)是模糊匹配异常||
e是一个例外||
e是TargetException||
e是个例外||
e是一个例外||
e是TargetParameterCountException||
e是MethodAccessException||
e是无效的||
e不受支持(例外)
{
response=ServerResponse.InvalidRequest;//ServerResponse是一个静态类,具有只读静态字符串字段
}
其他的
{
response=ServerResponse.GenericException;
}
}
如果(!string.IsNullOrWhiteSpace(响应))
{
SendSocketMessage(流、响应);
}
}
}
}
}
捕获(例外e)
{
Console.WriteLine(如ToString());
错误代码=1;
}
最后
{
listener.Stop();
}
WriteLine($“\nExit code:{errorCode}\n按任意键终止。”);
Console.ReadKey();
返回错误码;
}
私有静态void SendSocketMessage(网络流、字符串消息)
{
var encryptedsg=Encrypt.EncryptString(消息);
stream.Write(Encoding.UTF8.GetBytes(encryptedMsg));
}
私有静态字符串ReceiveRemoteMessage(NetworkStream)
{
const int bufferSize=1024;
字节[]字节;
字符串数据=string.Empty;
while(true)
{
字节=新字节[bufferSize];
int bytesReceived=stream.Read(字节);
string utfString=Encoding.UTF8.GetString(字节,0,bytesRec
var listener = new TcpListener(IPAddress.Loopback, ServerConfig.Port);
var listener = new TcpListener(IPAddress.Any, ServerConfig.Port);