Javafree
Página Inicial do Fórum > Java Avançado

java.net.SocketException: Socket is closed como resolver isso?



Criar novo tópico   Responder tópico


  1. Iury Borges
    Posts:2


    Comment Arrow

    Publicado em: 05/08/2016 14:46:30

    [quote="Iury Borges"]Galzera já tentei de tudo mais não consigo resolver.

    Cliente:
    package chat;

    import java.io.*;
    import java.net.*;
    import javax.swing.JOptionPane;
    public class cliente {
    private Socket socket;
    private enviaMenssagem envia;
    private recebeMenssagem recebe;


    public class recebeMenssagem extends Thread{

    @Override
    public void run(){
    try{

    DataInputStream in = new DataInputStream(socket.getInputStream());
    String mensagem = in.readUTF();
    System.out.println(mensagem);//cliente recebendo retorno do servidor


    in.close();
    }catch(Exception ex){
    System.out.println(ex);

    }

    }

    }

    public class enviaMenssagem extends Thread{

    @Override
    public void run(){

    try{
    String msg=JOptionPane.showInputDialog(null,"Digite seu nome.";
    DataOutputStream out = new DataOutputStream(socket.getOutputStream());
    out.writeUTF(msg);
    out.close();
    }catch(Exception ex){
    System.out.println(ex);

    }
    }
    }

    //construtor
    public cliente(){
    try {
    socket = new Socket("127.0.0.1", 6000);

    //envia as menssagens para o servidor
    envia=new enviaMenssagem();
    envia.start();

    //recebe as menssagem que o servidor envia
    recebe=new recebeMenssagem();
    recebe.start();

    //fechar
    socket.close();
    } catch (Exception e) {
    e.printStackTrace();
    }
    }

    //executa
    public static void main(String[] args)
    {
    new cliente();
    }
    }

    Servidor:
    package chat;

    import java.io.*;
    import java.net.*;
    import java.lang.*;
    public class servidor {
    //variaveis
    private Socket socket;
    private recebeMenssagem recebe;
    private enviaMenssagem envia;

    //classes
    public class recebeMenssagem extends Thread{

    @Override
    public void run(){
    try{
    DataInputStream in = new DataInputStream(socket.getInputStream());
    String mensagem = in.readUTF();
    System.out.println(mensagem);//mensagem recebida do cliente
    in.close();
    }catch(Exception ex){
    System.out.println(ex);

    }
    }

    }

    public class enviaMenssagem extends Thread{

    @Override
    public void run(){
    try{
    DataOutputStream out = new DataOutputStream(socket.getOutputStream());
    out.writeUTF("sua mensagem foi recebida";// retornando mensagem
    out.close();
    }catch(Exception ex){
    System.out.println(ex);

    }
    }

    }

    //construtor
    public servidor(){
    try {
    ServerSocket ss = new ServerSocket(6000);
    while (true) {
    System.out.println("Servidor aguardando...";
    socket = ss.accept();

    //recebe as menssagens do cliente
    recebe=new recebeMenssagem();
    recebe.start();

    //envia menssagens para o cliente
    envia=new enviaMenssagem();
    envia.start();

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


    }

    //executa
    public static void main(String[] args) throws IOException {
    new servidor();
    }



    }

    Me ajudem resolver isso



    O erros estão vindo das classes recebeMenssage e enviaMenssagem do servidor.java e cliente.java



  1. Iury Borges
    Posts:2


    Comment Arrow

    Publicado em: 05/08/2016 16:40:58

    os codigos ficaram assim:

    cliente:
    package chat;

    import java.io.*;
    import java.net.*;
    import javax.swing.JOptionPane;
    public class cliente {

    private enviaMenssagem envia;
    private recebeMenssagem recebe;


    public class recebeMenssagem extends Thread{
    private Socket socket=null;
    public recebeMenssagem(Socket socket){
    this.socket=socket;
    }

    @Override
    public void run(){

    try{

    DataInputStream in = new DataInputStream(socket.getInputStream());
    String mensagem;
    while((mensagem=in.readUTF())!=null){
    System.out.println(mensagem);//cliente recebendo retorno do servidor
    if(mensagem.equals("exit"){
    break;
    }

    }
    }catch(Exception ex){
    System.out.println("recebMenssagem "+ex);

    }

    }

    }

    public class enviaMenssagem extends Thread{
    private Socket socket=null;
    public enviaMenssagem(Socket socket){
    this.socket=socket;
    }

    @Override
    public void run(){

    try{
    if(socket.isConnected()){
    String msg="Mensagem enviado ao cliente";
    DataOutputStream out = new DataOutputStream(socket.getOutputStream());
    out.writeUTF(msg);
    out.flush();

    }
    }catch(Exception ex){
    System.out.println("enviamenssagem"+ex);

    }
    }
    }

    //construtor
    public cliente(){
    try {
    Socket socket = new Socket("127.0.0.1", 6000);

    //envia as menssagens para o servidor
    envia=new enviaMenssagem(socket);
    envia.start();

    //recebe as menssagem que o servidor envia
    recebe=new recebeMenssagem(socket);
    recebe.start();


    } catch (Exception e) {
    System.out.println("Cliente";

    }
    }

    //executa
    public static void main(String[] args)
    {
    new cliente();
    }
    }

    servidor:
    package chat;

    import java.io.*;
    import java.net.*;
    import java.lang.*;
    public class servidor {
    //variaveis

    private recebeMenssagem recebe;
    private enviaMenssagem envia;

    //classes
    public class recebeMenssagem extends Thread{
    private Socket socket=null;
    public recebeMenssagem(Socket socket){
    this.socket=socket;
    }

    @Override
    public void run(){
    try{
    DataInputStream in = new DataInputStream(socket.getInputStream());
    String mensagem;
    while((mensagem=in.readUTF())!=null){
    System.out.println(mensagem);//mensagem recebida do cliente

    }
    }catch(Exception ex){
    System.out.println("recebeMenssagem "+ex);

    }
    }

    }

    public class enviaMenssagem extends Thread{
    private Socket socket=null;

    public enviaMenssagem(Socket socket){
    this.socket=socket;
    }
    @Override
    public void run(){
    try{

    DataOutputStream out = new DataOutputStream(socket.getOutputStream());

    out.writeUTF("sua mensagem foi recebida";// retornando mensagem
    out.flush();



    }catch(Exception ex){
    System.out.println("enviaMenssagem "+ex);

    }
    }

    }

    //construtor
    public servidor(){
    try {
    ServerSocket ss = new ServerSocket(6000);
    while (true) {
    System.out.println("Servidor aguardando...";
    Socket socket = ss.accept();

    //recebe as menssagens do cliente
    recebe=new recebeMenssagem(socket);
    recebe.start();

    //envia menssagens para o cliente
    envia=new enviaMenssagem(socket);
    envia.start();


    }
    } catch (Exception ex) {
    System.err.println("servidor";
    }


    }

    //executa
    public static void main(String[] args) throws IOException {
    new servidor();
    }



    }

    tomare que ajude as outras pessoas no futuro, esse codigo o servidor para o cliente e vixe versa.



  1. Relacionados