Salve! to dando uma olhada na documentação do java mas não to entendendo qual a diferença entre:
Socket(InetAddress address, int port)
e
Socket(InetAddress address, int port, InetAddress localAddr, int localPort)
alguem tem idéia de qual seja?
Salve! to dando uma olhada na documentação do java mas não to entendendo qual a diferença entre:
Socket(InetAddress address, int port)
e
Socket(InetAddress address, int port, InetAddress localAddr, int localPort)
alguem tem idéia de qual seja?
a minha dúvida é o seguitne: um computador com um Socket pode se conectar a outro tendo o endereço interno e o externo dele?
Todos os sockets trabalham com 2 endereços:
O primeiro construtor que você forneceu, deixa que o socket conecte em um servidor, mas dá ao SO a liberdade de escolher a porta por onde esse socket irá receber os dados.
Somente um socket pode estar associado a uma determinada porta por vez, pois ele faz o que chamamos de “bind”. Ou seja, uma vez associado, a porta fica reservada apenas para aquele socket. Portanto, esse construtor é conveniente e poderia ser usado no seu applet ou na classe controladora.
O outro construtor, por outro lado, permite que vc especifique o endereço do IP e da porta que o socket. E o socket irá se associar a esses endereços.
Muito obrigado novamente! Quando um socket qualquer faz uma conexão a um servidor, para que este responda é necessário que se use qual método?(getRemoteSocketAddress () ou getInetAddress () ?) Talvez este método resolva meu problema: se existe tal metodo que é capaz de responder à aquele que pergunta, talvez seja possível salvar dados guardados por esse método para enviar os pacotes na situação do meu sistema
Um Socket é um canal entre 2 máquinas. Não mais.
Seu servidor terá vários Sockets, de vários clientes que estão conectados a ele.
Você pode procurar qual cliente é dono de qual socket pq o RemoteAddress() representa o endereço da máquina que está “do outro lado da linha”. Ou então, no seu protocolo, vc já envia um ID do cliente e busca o socket dele num mapa.
Certo, mas o resultado desse getRemoteAddress vale mesmo depois de fechada a conexão entre o servidor e o controlador? No exemplo eu pegaria esse valor e usaria a applet para enviar socket pra esse endereço.
Ah, a propósito:A minha namorada deu a mesma sugestão que vc ( sim, ela manja um pouquinho de info), usar o servidor como ponte. Os clientes ficariam perguntando o tempo todo: “tem alguma ordem pra mim?”, o trabalho da applet seria somente enviar uma string pro servidor com o ID do cliente.
Somei o que vc me ensinou ao que pesquisei um pouco e percebi que é asim que funciona alguns chats ^^ (na verdade de modo inverso:sempre que recebe algo novo o servidor envia pra todos os endereços da lista dele, os destinatários filtram ou não)
Não, a conexão entre eles não deve fechar. Se isso acontecer, o servidor não será mais capaz de enviar mensagens para o controlador, pq o controlador estará atrás de um NAT.
O cliente não precisa ficar perguntando o tempo todo. Basta que a conexão fique aberta, para o servidor poder enviar a mensagem diretamente para o cliente quando a oportunidade surgir. O cliente só precisaria dar sinal de vida de vez enquando, para que vc saiba que ele está lá. Isso só pq o socket não detecta um cliente que caiu abruptamente.
Na verdade, fazer isso seria uma grande idiotice, a menos que você esteja numa rede local usando endereços de broadcast. Caso contrário, você irá multiplicar o payload pelo número de clientes, e ter que ter muito mais banda no servidor. Fora que isso permite que outros clientes façam sniffing.
O correto é usar um pouco de processamento do servidor e evitar esse desperdício de banda, fazendo com que ele redirecione só os pacotes certos para as pessoas certas.
eu concordo, é que estava interessado em como funcionava os chats tb ( vi um projeto do IME-USP que era assim). E essa alternativa era (a que consome uma banda do kct)só no caso de não funcionar o meu método( e sim, no projeto deles trata-se de um chat para um público limitado); agora percebi que eu fechava as conexões de besta, tentava economizar o lado do servidor e acabei piorando a situação.
Em todo caso, agradeço a ajuda! desculpe a inexperiência mas como disse na escola não tem apoio pra quem tem umas idéias mirabolantes dessas então não sabia nem por onde começar… tentei desenvolver do zero os métodos de conexão entre os hosts, e é claro que não são os mais eficientes. Por sorte minha, o pessoal daqui tem muita boa vontade 
Se tiver interesse de ver como ficou o projeto(qndo eu terminar ele) eu mando uma licensa pra vc. Não para ver a parte técnica, já que é responsabilidade minha e seria um abuso com vc e com outros usuários daqui, mas para dar a sua opinião e visão como cliente: o que gostou, ou que não gostou… etc, para mudarmos em versões futuras
Sem problemas… qualquer outra dúvida é só perguntar… 
Depois de pronto eu gostaria de dar uma olhadinha no seu trabalho sim, se for possível.