Dúvida boba sobre socket.close() em jogo com threads. Quem fecha a conexão?

Boa tarde, fiz um exercício em java que funciona, mais ou menos. Menos um requisito funcional, que creio ser por algum erro bobo.

Client side:

ClienteTCP.java

package com.example.clientetcp;

import java.io.*;
import java.net.*;

public class ClienteTCP {
    public static void main(String args[]) throws Exception {
        Socket s = new Socket("localhost", 4567);
        BufferedReader doUsuario = 
                        new BufferedReader(new InputStreamReader(System.in));
        BufferedReader doServidor =
                        new BufferedReader(new InputStreamReader(s.getInputStream()));
        PrintWriter escrever = new PrintWriter(s.getOutputStream(), true);

        System.out.println("Diga um numero ae: ");
        String palpite = doUsuario.readLine();
        escrever.println(palpite);

        System.out.println(doServidor.readLine());
    }
}

Server side:

ServidorTCP.java

package com.example.servidortcp;

import java.io.*;
import java.net.*;

public class ServidorTCP extends Thread {
    public static void main(String[] args) throws IOException {
        int porta = 4567;
        ServerSocket listening = new ServerSocket(porta);
        while(true) {
            Socket conn = listening.accept();
            MSGResponse msgr = new MSGResponse(conn);
            Thread t = new Thread(msgr);
            t.start();
        }
    }
}

import java.io.*;
import java.net.Socket;
import java.util.Random;
import java.util.Scanner;

public class MSGResponse implements Runnable {
    private Socket conn;
    private int t;
    
    public MSGResponse(Socket conn) {
        this.conn = conn;
    }

    public void run() {
        String resposta;
        int num = new Random().nextInt(9);
        try {
            for(t = 7; t >= 1; t--) {
                Scanner palpite = new Scanner(this.conn.getInputStream());
                int guess = Integer.parseInt(palpite.nextLine());
                if(guess == 0)
                    resposta = "tchau, nego";
                if(guess == num)
                    resposta = "acertou, mideravi! | Tentativas = " + t;
                else if(guess > num)
                    resposta = "pegue leve, foi muito :( | Tentativas = " + t;
                else
                    resposta = "foi pouco =/ | Tentativas = " + t;
                PrintWriter responder = 
                                new PrintWriter(this.conn.getOutputStream(), true);
                responder.println(resposta);
            }
            conn.close();
        } catch(IOException e) {
            System.out.println(e);
        }
    }
}

Com private int t;e for(t = 7; t >= 1; t--) { eu pretendia usar o contador t como número de tentativas. Como:

for(t = 7; t >= 1; t--) {
    faz algo;
}

Mas o servidor fecha o socket a cada loop, o que fiz de tão errado? Ele deveria fechar após 6 palpites.

1 curtida

Mas o cliente tá fechando a conexão após a primeira tentativa, coloque o código de interação com o servidor dentro de um loop.

1 curtida