Исключение «… целевая машина активно отказалась…» в простом клиент-серверном приложении

1

При создании простого клиент-серверного приложения у меня есть дорожный блок

при тестировании его функциональности в обратной последовательности я всегда получаю

Никакое соединение не может быть сделано, потому что целевая машина активно отказалась от нее 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() все работает отлично → почему это так?

Теги:
sockets
client-server
tcplistener

1 ответ

1
Лучший ответ

Хорошо, поэтому проблема в этой функции была простой. Я манипулирую с параметрами локально, которые приводят к тому, что peerListener.Start() запускается только локально, изменяя его на static, трюк...

  CreateNewTcpListenerANDstart()
 {
  peerListener = new TcpListener(IPAddress.Any, ComSettings.Port);
  peerListener.Start();
 }

Ещё вопросы

Сообщество Overcoder
Наверх
Меню