none
Teste de Socket RRS feed

  • Pergunta

  • Boa tarde

    Pessoal criei um código que faz a conexão em um ip e determinada porta, esta funcionando consigo conectar e quando ele não consegue me avisa que não é possível fazer a conexão, até aí ok.

    O problema que estou tendo é que tenho um único ip e mesmo tem duas portas e quando uma delas não conecta eu consigo enviar que não foi possível conectar, mas não consigo identificar a porta, abaixo segue o código:

     private void conectarEDGE50()
            {
                try
                {
                    if (m_sock != null && m_sock.Connected)
                    {
                        m_sock.Shutdown(SocketShutdown.Both);
                        System.Threading.Thread.Sleep(10);
                        m_sock.Close();
                    }
    
                    if (m_sock2 != null && m_sock2.Connected)
                    {
                        m_sock2.Shutdown(SocketShutdown.Both);
                        System.Threading.Thread.Sleep(10);
                        m_sock2.Close();
                    }
    
                    m_sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                    m_sock2 = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
    
                    IPEndPoint epServer = new IPEndPoint(IPAddress.Parse(ip_edge50), Convert.ToInt32(porta1_edge50));
                    IPEndPoint epServer2 = new IPEndPoint(IPAddress.Parse(ip_edge50), Convert.ToInt32(porta2_edge50));
    
                    m_sock.Blocking = false;
                    m_sock2.Blocking = false;
    
                    AsyncCallback onconnect = new AsyncCallback(OnConnect);
                   
                    m_sock.BeginConnect(epServer, onconnect, m_sock);
                    m_sock2.BeginConnect(epServer2, onconnect, m_sock2);
                }
                catch (Exception ex)
                {
                    MessageBox.Show(this, ex.Message, "Falha ao conectar o EDGE50!");
                }
            }
    
    public void OnConnect(IAsyncResult ar)
            {
                Socket sock = (Socket)ar.AsyncState;
                try
                {
                    if (sock.Connected)
                        SetupRecieveCallback(sock);
                    else
                       MessageBox.Show("Não foi possível conectar uma das antenas");
    
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message, "Erro desconhecido");
                }
            }

    Nesse caso no método OnConnect eu tentei avisar a porta que não conectou da seguinte forma:

    MessageBox.Show("Não foi possível conectar a porta " + ((IPEndPoint)sock.RemoteEndPoint).Port.ToString());

    Mas ele informa que como não esta conectado não posso chamar essa ação.

    Alguém tem ideia de como resolver isso?

    segunda-feira, 16 de setembro de 2013 20:58

Respostas

  • Usa o LocalEndPoint ou outra propriedade do Socket em vez do RemoteEndPoint.

    É só colocar um breakpoint e inspecionar o socket.

    • Marcado como Resposta Alexandre CCarmo terça-feira, 29 de outubro de 2013 15:53
    quarta-feira, 18 de setembro de 2013 11:47