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

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

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

Соединение установить не удалось, так как целевая машина отказала ему 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;
    }   

РЕДАКТИРОВАТЬ Я проверил свой клиент с помощью netcat, и он работает, поэтому, скорее всего, это вина сервера.

EDIT2 проблема с этой функцией _infrastructure_TcpServerAndClient() , когда я беру из нее все компоненты component(peerListenr) и просто использую метод base(socketListener()), все работает нормально -> почему так ??


person LordTitiKaka    schedule 25.05.2014    source источник
comment
peerListener оборачивает сокет, который вы начинаете прослушивать, но вы вызываете AcceptSocket() на _infrastructure_TcpServerAndClient.   -  person C.Evenhuis    schedule 26.05.2014
comment
поправьте меня, если я ошибаюсь, но мне нужно, чтобы AcceptSockt ждал входящего соединения и обрабатывал их, что означает зависшую операцию, не так ли?   -  person LordTitiKaka    schedule 26.05.2014
comment
Вы правы, но вам, вероятно, нужно вызвать AcceptSocket() на TcpListener, который вы запустили (peerListener), а не на другом.   -  person C.Evenhuis    schedule 26.05.2014
comment
@C.Evenhuis Я собираюсь отредактировать код, чтобы он соответствовал моему, показав, чем он отличается от моего, я нашел, в чем проблема, но не знаю, как это исправить.   -  person LordTitiKaka    schedule 26.05.2014


Ответы (1)


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

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