none
Me ajudem a interpretar 3 linhas de código [Conceitos básicos - Socket] RRS feed

  • Pergunta


  • Estou aprendendo sockets e estou em dúvidas em alguns coisas básicas.

    // atributos

    private TcpListener SERVIDORBP; private TcpClient CLIENTEBP;

    // construtor da classe public servidor(int porta) { this.SERVIDORBP = new TcpListener(IPAddress.Any, porta); this.CLIENTEBP = default(TcpClient); this.SERVIDORBP.Start(); this.CLIENTEBP = SERVIDORBP.AcceptTcpClient(); }

    1)

    this.SERVIDORBP = new TcpListener(IPAddress.Any, porta);

    Uma instância da classe TcpListener recebe como parâmetro um endereço IP e uma porta, ok? Então, esse endereço IP é o endereço da máquina que o servidor está rodando ou é o endereço IP do cliente que faz a solicitação?

    2)

    this.CLIENTEBP = default(TcpClient);

    O que quer dizer essa linha? O objeto CLIENTEBP recebe os "atributos"  padrões da classe TcpClient? Como assim?

    3)

    this.CLIENTEBP = SERVIDORBP.AcceptTcpClient();

    Nessa linha de código, o objeto CLIENTEBP recebe a aceitação do servidor?


    • Editado Csharp Csharp sexta-feira, 12 de fevereiro de 2016 20:17
    sexta-feira, 12 de fevereiro de 2016 20:16

Respostas

  • Boa tarde.

    Vamos lá:

    1) Como o nome já diz, "Listener", então ele irá ficar aguardando algo; nesta linha com o IPAddress.Any, ele está dizendo que irá aceitar qualquer IP de cliente na porta passada no parâmetro. Então, sim, é o IP do cliente que faz a solicitação.

    2) Bom, a linha de pensamento é essa, porém... O default(TcpClient) é como se fosse um:

    this.CLIENTEBP = null;

    O default para tipos de referência retornará null; para tipos primitivos (int, bool, etc.) retorna seu valor padrão (int = 0, bool = false).

    3) Nesta linha ele está recebendo conexões pendentes ao servidor; ou seja, temos o servidor já rodando e caso tenha alguma solicitação de algum cliente, ele irá gerar a referência deste cliente que está solicitando conexão. Cuidado pois esta linha irá esperar até que tenha uma conexão; até lá, o programa não irá continuar.

    O que normalmente se faz é criar threads para fazer esta linha e o código não irá fazer algo até ter uma conexão (ou seja, se cria um loop e fica verificando se existem conexões pendentes, a partir do momento que tiver alguma, ele irá executar os códigos de acordo com a lógica). O uso de threads para isto também é usado para criar um servidor multithreading; caso tu não deixes multithreading, teu servidor irá processar somente uma solicitação por vez.

    Espero que já dê uma esclarecida em suas dúvida.


    Att., Rafael Simor

    • Marcado como Resposta Csharp Csharp sexta-feira, 12 de fevereiro de 2016 21:27
    sexta-feira, 12 de fevereiro de 2016 21:11

Todas as Respostas

  • Boa tarde.

    Vamos lá:

    1) Como o nome já diz, "Listener", então ele irá ficar aguardando algo; nesta linha com o IPAddress.Any, ele está dizendo que irá aceitar qualquer IP de cliente na porta passada no parâmetro. Então, sim, é o IP do cliente que faz a solicitação.

    2) Bom, a linha de pensamento é essa, porém... O default(TcpClient) é como se fosse um:

    this.CLIENTEBP = null;

    O default para tipos de referência retornará null; para tipos primitivos (int, bool, etc.) retorna seu valor padrão (int = 0, bool = false).

    3) Nesta linha ele está recebendo conexões pendentes ao servidor; ou seja, temos o servidor já rodando e caso tenha alguma solicitação de algum cliente, ele irá gerar a referência deste cliente que está solicitando conexão. Cuidado pois esta linha irá esperar até que tenha uma conexão; até lá, o programa não irá continuar.

    O que normalmente se faz é criar threads para fazer esta linha e o código não irá fazer algo até ter uma conexão (ou seja, se cria um loop e fica verificando se existem conexões pendentes, a partir do momento que tiver alguma, ele irá executar os códigos de acordo com a lógica). O uso de threads para isto também é usado para criar um servidor multithreading; caso tu não deixes multithreading, teu servidor irá processar somente uma solicitação por vez.

    Espero que já dê uma esclarecida em suas dúvida.


    Att., Rafael Simor

    • Marcado como Resposta Csharp Csharp sexta-feira, 12 de fevereiro de 2016 21:27
    sexta-feira, 12 de fevereiro de 2016 21:11
  • Me ajudou bastante.

    Obrigado, Rafael Simor!

    sexta-feira, 12 de fevereiro de 2016 21:27