Trabalhando com muitos clientes.
Essa parte é apenas no servidor, para entender, recomendo estudar array.
No visual basic 6, há a opção para criar um array de controle dentro da caixa de propriedades. Isso facilita um pouco.
O que vamos fazer é usar apenas 1 winsock para escutar as conexões e, aceita-las no winsock adicional.
Server(0) será a porta para todas as conexões, quando uma nova conexão for aceita. Colocaremos essa conexão no Server(1) e assim por diante.
Eu adicionei um listbox ao servidor, ficando:
Vou abrigar 10 clientes no servidor, nesse caso, tenho que criar 10 variaveis buffer, uma cada para cliente. Criei uma estrutura com buffer e uma variavel boolean como conected.
No command1, o botão para ligar o servidor, precisamos inicializar os novos winsock para não causar nenhum erro ao programa. Perceba que, Server(0) sempre será o winsock de escuta.
A partir de agora, quando trabalhamos com controle de array, os métodos dos objetos sempre devem conter o parâmetro "Index", esse index é o número de cada controle.
Se alguém conectar no primeiro controle Server(1), o número da conexão desse individuo será 1 e sucessivamente.
Quando a conexão fechar, esse cliente será desconectado para que outro possa conectar no mesmo lugar, caso contrário, o winsock continuará ocupado sendo que não há ninguém conectado.
No metodo ConnectionRequest, vamos procurar por um lugar disponível nas nossas variaveis.
Server(0) só receberá a conexão e irá procurar algum lugar livre para aceita-la.
No método DataArrival, onde os dados chegam, cada informação que chegar ao servidor, devemos colocar dentro de seus respectivos donos para que não haja nenhuma confusão.
Foi esse o motivo de eu ter trocado, buffer por Cliente(Index).buffer.
E por último, o HandleData, a diferença é que vamos passar o número index para ele também para que o servidor possa devolver os dados caso necessitar.
Criamos 11 winsock no servidor, o Socket número 0, será o responsável por aceitar todas as conexões na porta 666.
Quando ocorre um novo pedido de conexão, o Socket 0, joga a conexão nos winsock de 1 a 10, a porta 666 sempre estará livre pois quem está com as conexões são os winsock 1 a 10.
A porta 666 esperando por uma conexão.
Abri 5 clientes e conectei ao servidor.
O cliente 1 conectou com a porta 9940 na porta 666 do servidor.
O cliente 2 conectou com a porta 9941 na porta 666 do servidor.
O cliente 3 conectou com a porta 9942 na porta 666 do servidor.
O cliente 4 conectou com a porta 9943 na porta 666 do servidor.
O cliente 5 conectou com a porta 9944 na porta 666 do servidor.
http://www.mediafire.com/download/oe5d0440495635a/Winsock_Aula_4.rar
Essa parte é apenas no servidor, para entender, recomendo estudar array.
No visual basic 6, há a opção para criar um array de controle dentro da caixa de propriedades. Isso facilita um pouco.
O que vamos fazer é usar apenas 1 winsock para escutar as conexões e, aceita-las no winsock adicional.
Server(0) será a porta para todas as conexões, quando uma nova conexão for aceita. Colocaremos essa conexão no Server(1) e assim por diante.
Eu adicionei um listbox ao servidor, ficando:
Vou abrigar 10 clientes no servidor, nesse caso, tenho que criar 10 variaveis buffer, uma cada para cliente. Criei uma estrutura com buffer e uma variavel boolean como conected.
No command1, o botão para ligar o servidor, precisamos inicializar os novos winsock para não causar nenhum erro ao programa. Perceba que, Server(0) sempre será o winsock de escuta.
A partir de agora, quando trabalhamos com controle de array, os métodos dos objetos sempre devem conter o parâmetro "Index", esse index é o número de cada controle.
Se alguém conectar no primeiro controle Server(1), o número da conexão desse individuo será 1 e sucessivamente.
Quando a conexão fechar, esse cliente será desconectado para que outro possa conectar no mesmo lugar, caso contrário, o winsock continuará ocupado sendo que não há ninguém conectado.
No metodo ConnectionRequest, vamos procurar por um lugar disponível nas nossas variaveis.
Server(0) só receberá a conexão e irá procurar algum lugar livre para aceita-la.
No método DataArrival, onde os dados chegam, cada informação que chegar ao servidor, devemos colocar dentro de seus respectivos donos para que não haja nenhuma confusão.
Foi esse o motivo de eu ter trocado, buffer por Cliente(Index).buffer.
E por último, o HandleData, a diferença é que vamos passar o número index para ele também para que o servidor possa devolver os dados caso necessitar.
Criamos 11 winsock no servidor, o Socket número 0, será o responsável por aceitar todas as conexões na porta 666.
Quando ocorre um novo pedido de conexão, o Socket 0, joga a conexão nos winsock de 1 a 10, a porta 666 sempre estará livre pois quem está com as conexões são os winsock 1 a 10.
A porta 666 esperando por uma conexão.
Abri 5 clientes e conectei ao servidor.
O cliente 1 conectou com a porta 9940 na porta 666 do servidor.
O cliente 2 conectou com a porta 9941 na porta 666 do servidor.
O cliente 3 conectou com a porta 9942 na porta 666 do servidor.
O cliente 4 conectou com a porta 9943 na porta 666 do servidor.
O cliente 5 conectou com a porta 9944 na porta 666 do servidor.
http://www.mediafire.com/download/oe5d0440495635a/Winsock_Aula_4.rar