Usuário com melhor resposta
Me ajudem a interpretar 3 linhas de código [Conceitos básicos - Socket]

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
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
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
-