Jump to content
Muloo

Problema com sockets ao fechar client java.net.SocketException

Recommended Posts

Olá, bom dia, boa tarde ou boa noite, estou tendo um problema, com um sistema que estou criando, agradeço a quem puder ajudar. Então, esse sistema basicamente passa um "protocolo" para os servidor e ele retorna um objeto, e vice-versa, porém, ao finalizar o cliente e reabrir sem fazer o mesmo com o servidor, é causado um erro no servidor, e ao tentar fazer algum retorno de um objeto após re-abrir o cliente é causado um erro.

Erro no server ao fechar o cliente:

java.net.SocketException: Connection reset
    at java.net.SocketInputStream.read(SocketInputStream.java:210)
    at java.net.SocketInputStream.read(SocketInputStream.java:141)
    at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:284)
    at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:326)
    at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:178)
    at java.io.InputStreamReader.read(InputStreamReader.java:184)
    at java.io.BufferedReader.fill(BufferedReader.java:161)
    at java.io.BufferedReader.readLine(BufferedReader.java:324)
    at java.io.BufferedReader.readLine(BufferedReader.java:389)
    at main.java.Manager.run(Manager.java:45)

Erro no cliente ao reabrir e tentar obter o objeto:

java.io.StreamCorruptedException: invalid stream header: 73720013
    at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:866)
    at java.io.ObjectInputStream.<init>(ObjectInputStream.java:358)
    at main.java.controllers.VendedoresUI.load(VendedoresUI.java:69)
    at main.java.controllers.VendedoresUI.initialize(VendedoresUI.java:54)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2548)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2441)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3214)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3175)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3148)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3124)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3104)
    at javafx.fxml.FXMLLoader.load(FXMLLoader.java:3097)
    at main.java.controllers.Controller.loadUI(Controller.java:150)
    at main.java.controllers.Controller.changeUI(Controller.java:111)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at sun.reflect.misc.Trampoline.invoke(MethodUtil.java:71)
    at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at sun.reflect.misc.MethodUtil.invoke(MethodUtil.java:275)
    at javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1769)
    at javafx.fxml.FXMLLoader$ControllerMethodEventHandler.handle(FXMLLoader.java:1657)
    at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86)
    at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
    at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
    at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
    at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
    at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54)
    at javafx.event.Event.fireEvent(Event.java:198)
    at javafx.scene.Scene$ClickGenerator.postProcess(Scene.java:3470)
    at javafx.scene.Scene$ClickGenerator.access$8100(Scene.java:3398)
    at javafx.scene.Scene$MouseHandler.process(Scene.java:3766)
    at javafx.scene.Scene$MouseHandler.access$1500(Scene.java:3485)
    at javafx.scene.Scene.impl_processMouseEvent(Scene.java:1762)
    at javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2494)
    at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:394)
    at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:295)
    at java.security.AccessController.doPrivileged(Native Method)
    at com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$353(GlassViewEventHandler.java:432)
    at com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:389)
    at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:431)
    at com.sun.glass.ui.View.handleMouseEvent(View.java:555)
    at com.sun.glass.ui.View.notifyMouse(View.java:937)
    at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
    at com.sun.glass.ui.win.WinApplication.lambda$null$147(WinApplication.java:177)
    at java.lang.Thread.run(Thread.java:748)

1. Classes do server:

1.1. Server.java

public class Server extends Thread{

    public Server(){}

    public void run() {

        try{

            ServerSocket listener = new ServerSocket(4444);
            listener.setSoTimeout(0);

            System.out.println("Server is now running");

            try {
                while (true) {

                    Socket socket = listener.accept();

                    new Manager(socket).start();
                }
            } finally {
                listener.close();
            }

        } catch (IOException ioexception){

            System.out.println("\u001B[31mError opening server, more info: ");
            System.out.println(ioexception);
            System.out.println("Closing server...");
            System.exit(0);

        }

    }

}

1.2. Manager.java

public class Manager extends Thread{
    private Socket socket;
    private BufferedReader in;
    private PrintWriter out;

    public Manager(Socket socket){
        this.socket = socket;
        System.out.println("\u001B[32m" + socket.getLocalAddress() + ":" + socket.getPort() + " connected");
    }

    @Override
    public void run() {

        try {

            out = new PrintWriter(socket.getOutputStream(), true);

            out.println("Connected");

            while(true) {
                ObjectOutputStream objectOutput = new ObjectOutputStream(socket.getOutputStream());
                in = new BufferedReader(new InputStreamReader(socket.getInputStream()));

                if(in.readLine().contains(Protocols.VENDEDOR_GET_ALL)) {
                    ResultSet res = SQLManager.Query("SELECT * FROM vendedores");
                    List<Vendedor> list = new ArrayList<>();

                    while (res.next()) {
                        Vendedor vendedor = new Vendedor();
                        vendedor.setNOME(res.getString("NOME"));
                        vendedor.setCPF(res.getString("CPF"));
                        vendedor.setCONTATO(res.getString("CONTATO"));
                        vendedor.setCONTA(res.getInt("CONTA"));
                        vendedor.setBANCO(res.getInt("BANCO"));
                        vendedor.setAGENCIA(res.getString("AGENCIA"));
                        vendedor.setCORRENTE(res.getString("CORRENTE"));
                        list.add(vendedor);
                    }
                    objectOutput.writeObject(list);
                }
                objectOutput.flush();
            }

        } catch (IOException e) {
            System.out.println("\u001B[31m" + socket.getLocalAddress() + ":" + socket.getPort() + " disconnected");
            e.printStackTrace();
            interrupt();
        } catch (SQLException | ClassNotFoundException e) {
            Logger.getLogger(Manager.class.getName()).log(Level.SEVERE, null, e);
        }

    }
}

2. Classes do Client

2.1. ClientSocket.java

public class ClientSocket {

    private static Socket socket = null;
    private static BufferedReader in;
    private static PrintWriter out;

    public static void load(){
        try {

            socket = new Socket("127.0.0.1", 4444);
            in = new BufferedReader(
                    new InputStreamReader(socket.getInputStream()));
            out = new PrintWriter(socket.getOutputStream(), true);

            System.out.print(ClientSocket.getIn().readLine());

        } catch(IOException ioexception){
            Logger.getLogger(ClientSocket.class.getName()).log(Level.SEVERE, null, ioexception);
        }
    }

    public static Socket getSocket() {
        return socket;
    }

    public static BufferedReader getIn() {
        return in;
    }

    public static PrintWriter getOut() {
        return out;
    }
}

2.2 VendedoresUI.java

public class VendedoresUI implements Initializable {

    @FXML
    private TableView<Vendedor> table;

    @FXML
    private TableColumn<?, ?> colName;

    @FXML
    private TableColumn<?, ?> colCPF;

    @FXML
    private TableColumn<?, ?> colContato;

    @FXML
    private TableColumn<?, ?> colConta;

    @FXML
    private TableColumn<?, ?> colBanco;

    @FXML
    private TableColumn<?, ?> colAgencia;

    @FXML
    private TableColumn<?, ?> colCorrente;

    ObservableList<Vendedor> list;

    @Override
    public void initialize(URL location, ResourceBundle resources) {

        load();

    }

    private void load(){
        try {
            if(ClientSocket.getSocket().isClosed()){
                ClientSocket.load();
            }

            PrintWriter escritor = new PrintWriter(ClientSocket.getSocket().getOutputStream(), true);

            escritor.println(Protocols.VENDEDOR_GET_ALL);


            ObjectInputStream obi = new ObjectInputStream(ClientSocket.getSocket().getInputStream());
            List<Vendedor> mList = (List<Vendedor>) obi.readObject();

            list = FXCollections.observableArrayList(mList);

            colName.setCellValueFactory(new PropertyValueFactory<>("NOME"));
            colCPF.setCellValueFactory(new PropertyValueFactory<>("CPF"));
            colContato.setCellValueFactory(new PropertyValueFactory<>("CONTATO"));
            colConta.setCellValueFactory(new PropertyValueFactory<>("CONTA"));
            colBanco.setCellValueFactory(new PropertyValueFactory<>("BANCO"));
            colAgencia.setCellValueFactory(new PropertyValueFactory<>("AGENCIA"));
            colCorrente.setCellValueFactory(new PropertyValueFactory<>("CORRENTE"));
            table.setItems(list);

        } catch (IOException | ClassNotFoundException e) {
            e.printStackTrace();
        }

    }
}

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By MarVinOlivieraS
      Boa noite, tenho 34 anos e já comecei a aprender .php alguns anos atrás porém não pude continuar pois fui trabalhar numa área muito diferente. Hoje consegui um tempo para me dedicar a uma atividade q gosto. Escolhi voltar a a aprender a programar, mas como imagino que o mobile é que deve continuar em alta imaginei (Talvez por desinformação) que fosse mais rentável aprender Java invés de Php, já que o Java pode ser usado para desenvolvimento web, mobile e games.
      Eis que pesquisando sobre o assunto.... a maioria das pessoas que vi falando sobre começar a programar indicam aprender Javascript por também poder ser usado na maioria das áreas que o Java e por ter mais vagas de emprego.
       
      Aí imbaralhou tudo em minha cabeça... pois não quero aprender uma coisa que está entrando em desuso mas apesar de não lembrar mais nada de .php lembro que gostava de aprender a usá-lo e da sua randw Gama de possibilidades.
    • By T635
      Estou desenvolvendo um app para medir os batimentos do usuário por meio de um sensor em seu smartwatch. Entretanto estou com um bug na linha 36, e não faço a mínima ideia de como resolver.
      O link do código é esse:
      https://pastebin.com/gwEzhCdh
    • By joaohouto
      Olá, pessoal!
       
      Estou dando início a minha caminhada no desenvolvimento nativo para Android, e durante esse percurso encontrei certa dificuldade ao tentar exibir uma notificação simples.
      Segue o código:
       
      //imports public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Toolbar toolbar = findViewById(R.id.toolbar); setSupportActionBar(toolbar); gerarNotificacao(); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { int id = item.getItemId(); //noinspection SimplifiableIfStatement if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } public void gerarNotificacao(){ NotificationCompat.Builder builder = new NotificationCompat.Builder(this) .setSmallIcon( R.drawable.ic_launcher ) .setTicker( "Título ticker de teste" ) .setContentTitle( "Título de teste" ) .setContentText( "Texto de corpo - teste" ) .setAutoCancel( true ); int id = 1; NotificationManager notifyManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); notifyManager.notify( id, builder.build() ); } }  
      Obs.: Esse é um código exemplo que achei em um site aleatório da internet
      Bom, ao iniciar a tela principal a notificação não é exibida, por quê?
       
      Agradeço a quem puder ajudar. :D
    • By Rengavitp
      Boa tarde pessoal, sou novo ainda em java e estou com a seguinte dificuldade, preciso imprimir um pedido de venda que vem de um sistema no formato json, ja tentei de diversas formas mas nenhuma deu certo, alguem pode me ajudar? Vou colocar abaixo o arquivo json e o metodo mais recente que testei, porem ele só mostra null, sei que o problema deve estar na forma de percorrer o json, mas nao faço ideia de como fazer.
       
      { "retorno":{ "pedidos":[ { "pedido":{ "desconto":"15,00", "observacoes":"Testando o campo observações do pedido", "observacaointerna":"Testando o campo observações internas do pedido", "data":"2017-07-28", "numero":"1", "numeroPedidoLoja":"100000001", "vendedor":"João da Silva", "valorfrete":"22.50", "totalprodutos":"139.98", "totalvenda":"147.48", "situacao":"Em Aberto", "loja": "123456789", "dataPrevista":"2017-07-28", "tipoIntegracao":"Magento", "cliente":{ "nome":"Organisys Software", "cnpj":"00.000.000/0000-1", "ie":"0000000000", "rg":"162788484", "endereco":"Rua Visconde de São Gabriel", "numero":"000", "complemento":"Sala 000", "cidade":"Bento Gonçalves", "bairro":"Cidade Alta", "cep":"95.700-000", "uf":"RS", "email":"teste@organisys.com.br", "celular":"", "fone":"(54) 2222-22222" }, "itens":[ { "item":{ "codigo":1234, "descricao":"Mochila", "quantidade":"2.0000", "valorunidade":"69.990000000", "precocusto":null, "descontoItem":"0.00", "un":"Pç", "pesoBruto": "0.520", "largura": "20", "altura": "18", "profundidade": "15", "unidadeMedida": "cm", "descricaoDetalhada": "Ecobag esportiva" } } ], "parcelas":[ { "parcela":{ "valor":"73.74", "dataVencimento":"2017-07-28 00:00:00", "obs":"Teste obs 1", "forma_pagamento":{ "id":"1", "descricao":"Dinheiro", "codigoFiscal":"1" } } }, { "parcela":{ "valor":"73.74", "dataVencimento":"2017-08-28 00:00:00", "obs":"Teste obs 2", "forma_pagamento":{ "id":"1", "descricao":"Dinheiro", "codigoFiscal":"1" } } } ], "nota":{ "serie":"1", "numero":"012346", "dataEmissao":"2017-08-28 00:00:00", "situacao":"1", "chaveAcesso":"43140401056417000139550010000123461496923524", "valorNota": "147.48" }, "transporte":{ "transportadora":"Transportadora", "cnpj":"00.000.000/0000-1", "tipo_frete":"R", "volumes":[ { "volume":{ "idServico":"1231293", "servico":"SEDEX 10", "codigoRastreamento":"SX052413651BR", "dataSaida":"2017-07-28", "prazoEntregaPrevisto":"1", "valorFretePrevisto":"11.25", "valorDeclarado": "0.00", "remessa":{ "numero":"12345AAA", "dataCriacao":"2017-10-17" }, "dimensoes":{ "peso":"1.553", "altura":"20", "largura":"15", "comprimento":"20", "diametro":"0" } } }, { "volume":{ "idServico":"1231293", "servico":"SEDEX 10", "codigoRastreamento":"SX052413651BR", "dataSaida":"2017-07-28", "prazoEntregaPrevisto":"1", "valorFretePrevisto":"11.25", "remessa":null, "dimensoes":{ "peso":"1.553", "altura":"20", "largura":"15", "comprimento":"20", "diametro":"0" } } } ], "enderecoEntrega":{ "nome":"Organisys Software Entrega", "endereco":"Rua Assis Brasil", "numero":"222", "complemento":"", "cidade":"Bento Gonçalves", "bairro":"Centro", "cep":"95.700-000", "uf":"RS" } } } } ] } } package javaapplication2; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import org.json.simple.JSONObject; import org.json.simple.parser.JSONParser; import org.json.simple.parser.ParseException; public class JSONRead { public static void main(String[] args) { JSONObject jsonObject; //Cria o parse de tratamento JSONParser parser = new JSONParser(); //Variaveis que irao armazenar os dados do arquivo JSON String nome; String sobrenome; String estado; String pais; try { //Salva no objeto JSONObject o que o parse tratou do arquivo jsonObject = (JSONObject) parser.parse(new FileReader( "//users/vagnermocelin/teste.json")); //Salva nas variaveis os dados retirados do arquivo numero = (String) jsonObject.get("numero"); vendedor = (String) jsonObject.get("vendedor"); total_produtos = (String) jsonObject.get("total_produtos"); total_venda = (String) jsonObject.get("total_venda"); System.out.printf( "Numero: %s\nVendedor: %s\nProdutos: %s\nVenda: %s\n", numero, vendedor, total_produtos, total_venda); } //Trata as exceptions que podem ser lançadas no decorrer do processo catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (ParseException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }  
    • By MrPhantomRed
      Como um trabalho de fim de ano do curso técnico de informática que eu estou fazendo o professor pediu um software em Java. Bem, o tema é livre, mas eu estou meio perdido. Eu decidi fazer um software que baixe, organize e reproduza arquivos de músicas, como o Spotify (a versão desktop), mas estou sem um caminho ainda. Como pegar os arquivos da Internet e como filtrar os resultados? Por exemplo, se eu pesquisar uma música no SoundCloud aparece muitos resultados, como escolher a música certa que o usuário pede? Entre outros coisas eu pretendo fazer um aplicativo pra Android quando terminar tudo no desktop. Alguma sugestão?
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.