Leonardo
|
SÃO PEDRO DA ALDEIA RJ - BRASIL
|
|
ENUNCIADA !
|
|
|
Postada em 22/11/2004 21:51 hs
Estou fazendo um programa que tem um servidor e um cliente. E eu queria que todos os meus clientes se conectassem no servidor ao mesmo tempo. No Delphi, eu já vi o servidor com 1 winsock suportar múltiplas conexões. Funciona mais ou menos assim: Winsock.Sockets[0] // Conexão 1 Winsock.Sockets[1] // Conexão 2 Mas, no VB, esse Sockets não existe. É estranho porque, ao que parece, trata-se do mesmo componente. Alguém sabe se existe alguma coisa similar no VB?
|
|
|
|
Sandro
não registrado
|
|
ENUNCIADA !
|
|
|
Postada em 22/11/2004 22:38 hs
Você deverá criar um array de controles Winsock, para isso, você cria um Winsoc no seu form e atribui a ele o índice (Index) 0, depois, você deverá criar uma nova instância para cada conexão extra que surgir. Para criar uma nova instância, basta fazer o seguinte: Load WinSock(1) Load WinSock(2) E assim por diante. Cada componente Winsoc carregado pode utlillizar uma porta diferente, se desejar.
|
|
|
Leonardo
|
SÃO PEDRO DA ALDEIA RJ - BRASIL
|
|
ENUNCIADA !
|
|
|
Postada em 22/11/2004 22:44 hs
Pode usar uma porta diferente ou deve? Não vai dar erro de porta em uso?
|
|
|
Sandro
não registrado
|
|
ENUNCIADA !
|
|
|
Postada em 23/11/2004 01:13 hs
Não, você pode vários controles NO MESMO PROGRAMA usando portas iguais, o problema é um outro programa DENTRO DO MESMO COMPUTADOR usando a mesma porta. O Winsock usa o conceito de Sockets do Windows. Um Socket é um endereço IP associado a uma porta do TCP/IP. Você pode ter cerca de 32.000 portas diferentes para cada endereço. Algumas portas são fixas para certos serviços do protocolo, como a porta 80 usada pelo POP (ou será o SMTP? Eu nunca lembro direito...). Um detalhe que eu não citei: Você deverá ter no mínimo dois controles Winsock no seu projeto: um de escuta e outro de comunicação. O de escuta, fica esperando uma tentativa de conexão, este terá uma porta local definida, quando ele receber a solicitação de conexão (evento ConnectionRequest) você deverá disparar uma nova instância do winsoc de comunicação, atrubuindo a ele LocalPort=0 e usando o método Accept, passando para ele o RequestID que vem como parâmetro para o evento. A partir daí, você irá trabalhar apenas com o Winsoc de comunicação, através dos métodos GetData e SendData. Não esqueça de fechar todas as conexões quando o seu programa ecerrar, pois assim, você libera as portas do TCP/IP de forma correta e evita erros de execução no aplicativo.
|
|
|
Leonardo
|
SÃO PEDRO DA ALDEIA RJ - BRASIL
|
|
ENUNCIADA !
|
|
|
Postada em 23/11/2004 01:22 hs
Consegui fazer aqui, mas de um modo diferente. O meu programa servidor tem um cadastro com todas as máquinas clientes e os seus IPs. Coloquei então no programa cliente um winsock que fica aguardando conexões. No servidor, criei um vetor de winsocks, um pra cada máquina. Aí, ele usa o cadastro e dá um IP pra cada winsock conectar. O cliente aceita a conexão e deixa ativa pra trocar informação quando precisar. Por enquanto, está funcionando bem. Obrigado pela ajuda.
|
|
|
|