fala pessoal, estou desenvolvendo uma aplicação onde eu envio String para o servidor e la eu dicido o que fazer com ela,mas eu queri enviar uma imagem do servidor para o cliente,mas está dando erro na minha Stream de saida,eu posso fazer esses dois procedimentos usando o mesmo socket ??
OutputStream os = s.getOutputStream();
por que ?? sera pq eu estou usando o mesmo socket que recebe a conexao??
teria como eu criar um servidor que também e cliente ??
ele da um nullpointerException na linha OutputStream o = socket.getOutPutStream(), eu acho que é porque é a mesma socket que eu faço a conexão com o servidor, não sei pq …
Quando você chama o método accept do ServerSocket, pelo jeito que você configurou, o programa trava até algum cliente conectar. É garantido que quando ele retorna, você recebe o Socket do primeiro cliente que conectar. Não consegui entender porque deu NPE naquela linha.
Por via das dúvidas, coloca um System.out.println(socket == null) antes de chamar getOutputStream() e responde se printou true ou false.
I
invisiv3l
retono true
lvbarbosa
Não consegui entender porque está null só olhando para esse código. Posta o resto pra gente dar uma olhada. Pra mim é isso que você está fazendo, e dá certo:
ServerSocketserver;privateSocketsocket;byte[]b;inti;publicvoidmetodoEnviarPrint()throwsIOException{FileInputStreamfile=newFileInputStream("C:\\Users\\Jonatas\\Pictures\\loira.jpg");System.out.print(socket==null);OutputStreamos=socket.getOutputStream();//Cria uma Stream de byte//Cria uma Stream de byte de saida//cria um array de byteb=newbyte[10000];//le o que vem da inputStream(a imagem)e joga dentro do array de bytei=file.read(b);//envia a imagem em forma de byte para a maquina cliente.os.write(b,0,i);}publicvoidmetodoDesligar()throwsException{//Comandos co = new Comandos();Runtime.getRuntime().exec("cmd /c ");}publicvoidmetodoEnviarMensagem()throwsException{//Comandos co = new Comandos();Runtime.getRuntime().exec("cmd /c ");}publicvoidmetodoAbrirSite()throwsException{//Comandos co = new Comandos();Runtime.getRuntime().exec("cmd /c ");}publicvoidmetodoNotas()throwsException{//Comandos co = new Comandos();Runtime.getRuntime().exec("c:\\windows\\notepad.exe");}publicvoidcriarArquivo(StringnomeArquivo)throwsIOException{FileWriterfile=newFileWriter("Arquivo.txt");file.write(nomeArquivo);file.close();}voidmetodoConexao()throwsIOException,Exception{server=newServerSocket(8000);//Criar um Objeto serverSocket que aguarda conexao na porta 8000//Cria um Objeto do tipo socketsocket=newSocket();//espera algum cliente se conectar ao serveSocket é ao se conectar ele envia a conexao para o socket onde agente pode trabalhar com a mesma.socket=server.accept();while(true){InputStreamin=socket.getInputStream();byte[]buffer=newbyte[100000];intentrada=in.read(buffer);StringcomandoEnviado=newString(buffer,0,entrada);if(comandoEnviado.equals("1")){enviarArquivoe=newenviarArquivo();e.criarArquivo("Arquivo");comandoEnviado="";}elseif(comandoEnviado.equals("2")){enviarArquivoe=newenviarArquivo();e.metodoEnviarPrint();comandoEnviado="";}elseif(comandoEnviado.equals("3")){enviarArquivoe=newenviarArquivo();e.metodoNotas();comandoEnviado="";}elseif(comandoEnviado.equals("4")){enviarArquivoe=newenviarArquivo();e.metodoDesligar();comandoEnviado="";}elseif(comandoEnviado.equals("5")){enviarArquivoe=newenviarArquivo();e.metodoAbrirSite();comandoEnviado="";}}}
ServerSocketserver;privateSocketsocket;byte[]b;inti;OutputStreamos;InputStreamin;privatevoidmetodoEnviarPrint()throwsIOException{FileInputStreamfile=newFileInputStream("C:\\Users\\Jonatas\\Pictures\\loira.jpg");System.out.print(socket==null);//Cria uma Stream de byte//Cria uma Stream de byte de saida//cria um array de byteb=newbyte[10000];//le o que vem da inputStream(a imagem)e joga dentro do array de bytei=file.read(b);//envia a imagem em forma de byte para a maquina cliente.os.write(b,0,i);os.flush();file.close();os.close();}publicvoidmetodoDesligar()throwsException{//Comandos co = new Comandos();Runtime.getRuntime().exec("cmd /c ");}publicvoidmetodoEnviarMensagem()throwsException{//Comandos co = new Comandos();Runtime.getRuntime().exec("cmd /c ");}publicvoidmetodoAbrirSite()throwsException{//Comandos co = new Comandos();Runtime.getRuntime().exec("cmd /c ");}publicvoidmetodoNotas()throwsException{//Comandos co = new Comandos();Runtime.getRuntime().exec("c:\\windows\\notepad.exe");}publicvoidcriarArquivo(StringnomeArquivo)throwsIOException{FileWriterfile=newFileWriter("Arquivo.txt");file.write(nomeArquivo);file.close();}publicvoidmetodoConexao()throwsIOException,Exception{server=newServerSocket(8000);//Criar um Objeto serverSocket que aguarda conexao na porta 8000//Cria um Objeto do tipo socketsocket=newSocket();//espera algum cliente se conectar ao serveSocket é ao se conectar ele envia a conexao para o socket onde agente pode trabalhar com a mesma.socket=server.accept();while(true){in=socket.getInputStream();os=socket.getOutputStream();byte[]buffer=newbyte[100000];intentrada=in.read(buffer);StringcomandoEnviado=newString(buffer,0,entrada);if(comandoEnviado.equals("1")){enviarArquivoe=newenviarArquivo();e.criarArquivo("Arquivo");comandoEnviado="";}elseif(comandoEnviado.equals("2")){enviarArquivoe=newenviarArquivo();e.metodoEnviarPrint();comandoEnviado="";}elseif(comandoEnviado.equals("3")){enviarArquivoe=newenviarArquivo();e.metodoNotas();comandoEnviado="";}elseif(comandoEnviado.equals("4")){enviarArquivoe=newenviarArquivo();e.metodoDesligar();comandoEnviado="";}elseif(comandoEnviado.equals("5")){enviarArquivoe=newenviarArquivo();e.metodoAbrirSite();comandoEnviado="";}}}
}
staroski
Porque você sempre faz um new Socket() antes de fazer um accept?
Porque você instancia novamente a classe enviarArquivo no método metodoConexao()?
Comece a usar a convenção de código Java ao escrever seus códigos.