Socket JAVA !! banale!!

CMnet

Utente Attivo
219
69
CPU
Intel i5 3570K 4700 Mhz
Scheda Madre
Asrock Z77 OC Formula
HDD
WD caviar black 1000GB 7200rpm
RAM
A-DATA 8GB 1600Mhz XPG v2
GPU
Nvidia GTX 660 CC version
Audio
Integrata
Monitor
BenQ 22' HD
PSU
Antec HCG 620W 80+
Case
Aerocool Xpredator X3 White
OS
Windows 7 Professional 64bit (CRACCATO)
Ciao a tutti è da qualche giorno che sto cercando di capire come funzionano le socket in java dato che devo costruire una chat per un progetto scolastico. Non ho capito come mai il server non riesce a vedere il client e quindi a stampare la stringa che gli viene inviata:

CLIENT
Codice:
public static void main(String[] args) throws IOException { 
        //Connessione della Socket con il Server 
        String sentence;
        String mSentence;
        BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in)); 
        Socket socket = new Socket("127.0.0.1", 7777); 
        DataOutputStream os = new DataOutputStream(socket.getOutputStream());
        BufferedReader inFromServer = new BufferedReader(new                                                                       InputStreamReader(socket.getInputStream()));
        sentence = stdIn.readLine();
        os.writeBytes(sentence);
        System.out.println("Inviato: " + sentence);
        mSentence = inFromServer.readLine();
        System.out.print("Dal server: " + mSentence);
        socket.close();
}

SERVER
Codice:
    public static void main(String[] args)  throws IOException { 
        String sentence;
        String mSentence;
        ServerSocket serverSocket = new ServerSocket(7777);
        while(true)
        {
             Socket socket = serverSocket.accept();
             BufferedReader inFC= new BufferedReader(new InputStreamReader(socket.getInputStream()));
             DataOutputStream os = new DataOutputStream(socket.getOutputStream());
             sentence = inFC.readLine();
             mSentence = sentence.toUpperCase();
             os.writeBytes(mSentence);
             System.out.println("Ricevuto: " + sentence);

        }

Se potete illuminarmi su cosa non va in questo codice ne sarei grato se non si fosse capito io vorrei semplicemente scrivere sul client e vederlo stampato anche sul server (in locale).
Tencs...
 

1nd33d

Utente Attivo
653
279
CPU
Intel i5 3570K @ 4,5Ghz
Dissipatore
Scythe Mugen 2
Scheda Madre
Gigabyte Z77X-UD3H
HDD
Samsung 840 PRO 256GB + Sandisk Ultra 250GB + Sandisk Plus 960GB
RAM
2x8GB Crucial Ballistix Tactical @2000Mhz CL9
GPU
XFX RX480 GTR Black Edition
Audio
Auzentech X-Fi Forte
Monitor
AOC i2369VW
PSU
Seasonic P660
Case
eh?
Periferiche
Razer Naga HEX v2
OS
Windows 10 64bit - Linux Mint 18
Il codice del server è fondamentalmente sbagliato in quanto hai un accept nel ciclo while che per quello che devi fare è sbagliato. L'accept accetta una nuova connessione, quindi dal secondo ciclo rimarrà in attesa di un ulteriore client e le connessioni precedenti verranno prima o poi droppate perchè non più referenziate.
Il client non è il massimo dell'eleganza.
Mi pare comunque che tu voglia fare un sistema client-echoserver dove il client scrive qualcosa e il server risponde la stessa stringa in uppercase.
Questo codice dovrebbe fare quanto detto:

Client
Codice:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;

public class Client {
    public static void main(String[] args) {
        try (Socket clientSocket = new Socket("localhost",7777)){
            BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));
            BufferedReader clientIn = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
            PrintWriter clientOut = new PrintWriter(clientSocket.getOutputStream());
            String outMsg;
            while((outMsg = stdIn.readLine()) != null){
                clientOut.println(outMsg);
                clientOut.flush();
                System.out.println("Server risponde: " + clientIn.readLine());
            }
        } catch (IOException e) {
            System.out.println("Impossibile aprire il socket");
            System.exit(1);
        }
    }
}

Server
Codice:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {
    public static void main(String[] args){        
        try (ServerSocket server = new ServerSocket(7777)){
            Socket serverSocket = server.accept();
            System.out.println("Client connesso\n\n");
            BufferedReader srvIn = new BufferedReader(new InputStreamReader(serverSocket.getInputStream()));
            PrintWriter out = new PrintWriter(serverSocket.getOutputStream());
            String inMsg;
            while ((inMsg = srvIn.readLine()) != null){
                System.out.println("Server riceve: " + inMsg);
                out.println(inMsg.toUpperCase());
                out.flush();
            }            
        } catch (IOException e) {
            System.out.println("Impossibile aprire il socket");
            System.exit(1);
        }
    }
}
 
Ultima modifica:
  • Like
Reactions: CMnet

Entra

oppure Accedi utilizzando

Hot: E3 2021, chi ti è piaciuto di più?

  • Ubisoft

    Voti: 37 23.0%
  • Gearbox

    Voti: 3 1.9%
  • Xbox & Bethesda

    Voti: 102 63.4%
  • Square Enix

    Voti: 14 8.7%
  • Capcom

    Voti: 7 4.3%
  • Nintendo

    Voti: 21 13.0%
  • Altro (Specificare)

    Voti: 15 9.3%

Discussioni Simili