Criação de um programa java usando Wireless

Boa tarde a todos!
Estou com dificuldades na criação de um programa em Java.
Preciso criar um programa em que, estando instalado em outras maquinas, seja possivel a comunicação entre os programas via wireless. O programa basicamente é para troca de arquivos, ou seja, disponibilizando um arquivo no programa de uma maquina, ele estara disponivel para os outros programas nas outras maquinas.
Devera ter tambem um programa central que controla os outros, liberando ou travando a comunicação entre os terminais.
Alguem pode me ajudar?

Desde ja agradeço!

É só fazer um programa TCP/IP comum. Para o Java, é indiferente se a comunicação é via Wi-Fi ou rede cabeada. Aliás, para qualquer comunicação TCP/IP é indiferente.

Certo.
Então se a comunicação cliente/servidor funcionar numa rede cabeada, ela funcionará também numa rede wireless??
Pois fiz parte da aplicação que estou desenvolvendo, e através de uma rede cabeada, consigo fazer a comunicação e a troca de mensagens. Mas quando tentei por wireless, não consegui. Preciso ter um roteador para dar certo ou atraves de algum outro tipo de conexão sem fio (ad hoc por exemplo) pode dar certo?

PS: Possuo um notebook com Windows 7 Professional SP1 e um desktop com Windows XP Professional SP3.

Agradeço a ajuda!

dá certo sim. antes de testar sua aplicação faça um teste da rede. Abra o prompt de comando do windos e chame o comando ping, para verificar se o host está alcançável.

Obrigado. Parece que agora deu certo por conexão sem fio. Foi um problema de endereçamento ip. :smiley:
Agora preciso fazer a troca de arquivos entre os clientes. Vou procurar me informar sobre isso.

Muito Obrigado,

Boa tarde,

Fiz a aplicação para troca de arquivos. O cliente envia o arquivo ao servidor e o mesmo é recebido.
O problema é que o arquivo recebido tem um extensão no mínimo esquisita.
Por exemplo: Se eu selecionar o arquivo “Imagem.jpg” para ser enviado, o mesmo é enviado e recebido, mas é recebido como “Imagem.jpg����”.

Segue os trechos de código…

Servidor

@Override
        public void run() {
            try {
                System.out.println("Conectado ao Cliente...");
                JOptionPane.showMessageDialog(null, "Conectado a Cliente: " + client.getInetAddress().getHostAddress());
                
                BufferedReader input = new BufferedReader(new InputStreamReader(client.getInputStream()));
                String caminho = input.readLine();
                File arquivo = new File(caminho.trim());

                InputStream in = client.getInputStream();

                //File arquivo = new File("<caminho a ser salvo no servidor>");  
                OutputStream out = new FileOutputStream(arquivo);

                byte[] buf = new byte[4096];
                int len;
                while ((len = in.read(buf)) > 0) {
                    out.write(buf, 0, len);
                }
                out.flush();
                out.close();
                //JOptionPane.showMessageDialog(null, "Transferência concluÃda com sucesso!");  
                System.out.println("Transferência Concluída com Sucesso!");

                client.close();

            } catch (Exception ex) {
                ex.printStackTrace();
                //JOptionPane.showMessageDialog(null, "Algum erro com ocorreu (Servidor)...");  
                System.exit(1);
            }
        }

Cliente

@Override
    public void enviaArquivo(String path) {
        File f = new File(path);
        try {
            Socket socket = new Socket(this.getIpDoServidor(), this.getPorta());
            OutputStream out = socket.getOutputStream();

            //File arquivo = new File("<caminho do arquivo>"); - AQUI JÁ TENHO UM FILE f QUE POSSUI O CAMINHO DO ARQUIVO  
            InputStream in = new FileInputStream(f);
            String nome = f.getName().trim();
            out.write(nome.getBytes());

            byte[] buf = new byte[4096];
            int len;
            while ((len = in.read(buf)) > 0) {
                out.write(buf, 0, len);
            }
            //out.flush();
            out.close();
            socket.close();
            System.out.println("Transferência Concluída!");
            JOptionPane.showMessageDialog(null, "Transferência Concluída!");

        } catch (Exception ex) {  
            ex.printStackTrace();
        }
    }

Alguem poderia me ajudar a resolver o problema?

Muito Obrigado!

Faltou encerrar a linha na hora de mandar o arquivo:

public void enviaArquivo(String path) {
        File f = new File(path);
        try {
            Socket socket = new Socket(this.getIpDoServidor(), this.getPorta());
            OutputStream out = socket.getOutputStream();

            //File arquivo = new File("<caminho do arquivo>"); - AQUI JÁ TENHO UM FILE f QUE POSSUI O CAMINHO DO ARQUIVO  

            InputStream in = new FileInputStream(f);

            String nome = f.getName().trim();
            out.write(nome.getBytes() + "\n");   // tem que colocar o \n no final para o servidor entender onde termina a linha

            byte[] buf = new byte[4096];
            int len;
            while ((len = in.read(buf)) > 0) {
                out.write(buf, 0, len);
            }

            //out.flush();
            out.close();
            socket.close();
            System.out.println("Transferência Concluída!");
            JOptionPane.showMessageDialog(null, "Transferência Concluída!");

        } catch (Exception ex) {  
            ex.printStackTrace();
        }
    }

Tentei adicionar o “\n” como orientado, mas o netbeans nao aceitou colocar o “\n” em out.write().
Tentei então colocar o “\n” na linha de cima ficando assim:

String nome = f.getName().trim() + "\n";   
out.write(nome.getBytes());

Desse jeito, o arquivo é enviado e recebido no formato certo … mas por exemplo, se o arquivo for imagem, a imagem não aparece, e se o arquivo for musica, a musica nao toca. O tamanho do arquivo tanto enviado quanto recebido é o mesmo.

:S

Obrigado

Alguem???

Bom, o que você vai precisar fazer é estabelecer um mini-protocolo. Antes de enviar um arquivo, além do nome você pode enviar o número de bytes do arquivo. O lado que recebe deve ler o número de bytes e ler esse número exato. Dessa maneira, você não vai precisar do “\n”.

Valeu rmendes08, consegui resolver esta parte!
Agora, outra dúvida … quero passar o ip do cliente para o servidor armazená-lo, estou tentando usar InetAddress, com o qual eu consigo pegar o endereço ip do cliente.
Mas nao estou conseguindo fazer o envio para o servidor. Quer dizer, o envio é feito, mas no modo .toString();
Alguma sugestão??

Muito Obrigado

Não entendi, o que você quis dizer com modo toString() … de qualquer maneira, acho que você pode fazer isso do lado servidor mesmo. É até mais confiável usar o socket aberto no servidor, pois se você obter isso no cliente e enviar, é provável que você envie o IP da rede interna ao NAT.

Obter o endereço ip do cliente pelo lado do servidor? é isso?
Mas como faria isso?

http://download.oracle.com/javase/1,5,0/docs/api/java/net/Socket.html#getRemoteSocketAddress()