При создании простого клиент-серверного приложения у меня есть дорожный блок
при тестировании его функциональности в обратной последовательности я всегда получаю
Никакое соединение не может быть сделано, потому что целевая машина активно отказалась от нее 127.0.0.1:6001
это основная серверная программа, которая лежит внутри Task.Run(() =>...)
internal void startListener ()
{
ListenerThread = new Thread(new ThreadStart(socketListener));
ListenerThread.Name = "Listener";
ListenerThread.Priority = ThreadPriority.AboveNormal;
ListenerThread.Start();
ComThreadDictionary.Add(ListenerThread.Name, ListenerThread);
}
public void socketListener()
{
_infrastructure_TcpServerAndClient.CreateNewTcpListenerANDstart();
while (true)
{
_infrastructure_TcpServerAndClient.tcpSocket = await _infrastructure_TcpServerAndClient.peerListener.AcceptSocketAsync();
byte[] StreamMessage = new byte[9632];
Thread.Sleep(500);
try
{
MessageLength = _infrastructure_TcpServerAndClient.GetMessageLength(ref
StreamMessage);
}
catch(Exception ex)
{
//"Remote host disconnected"
}
//Do stuff with message...
}
}
это то, что вложен внутри этого метода CreateNewTcpListenerANDstart()
CreateNewTcpListenerANDstart()
{
peerListener = new TcpListener(IPAddress.Any, ComSettings.Port);
peerListener.Start();
}
peerlistener объявляется внутри следующим образом: public TcpListener peerListener внутри _infrastructure_TcpServerAndClient
вложенный метод для сбора сообщения
internal int GetMessageLength(ref byte[] StreamMessage)
{
int MessageLength;
MessageLength = tcpSocket.Receive(StreamMessage, 0, StreamMessage.Length,
SocketFlags.None);
return MessageLength;
}
EDIT Я проверил свой клиент с netcat, и он работает, поэтому он наиболее опасен по отношению к серверу
EDIT2 проблема _infrastructure_TcpServerAndClient()
с этой функцией _infrastructure_TcpServerAndClient()
, когда я (peerListenr)
из нее весь компонент (peerListenr)
и просто поставлю его метод socketListener()
все работает отлично → почему это так?
Хорошо, поэтому проблема в этой функции была простой. Я манипулирую с параметрами локально, которые приводят к тому, что peerListener.Start()
запускается только локально, изменяя его на static, трюк...
CreateNewTcpListenerANDstart()
{
peerListener = new TcpListener(IPAddress.Any, ComSettings.Port);
peerListener.Start();
}