PROBLEMA Non riesco a mandare più di tot. messaggi attraverso un socket java

JDany

Utente Attivo
461
24
CPU
Ryzen 9 3900x
Scheda Madre
ASUS H170-Pro
RAM
Corsair Vengeance LPX 2x8 GB
GPU
ZOTAC RTX 3070 TWIN EDGE OC
Monitor
Philips Gaming Monitor 24"
PSU
Corsair CX450M
Case
Sharkoon VS4-V
OS
Windows 11 Pro
Salve. Il mio errore si manifesta quando mando due messaggi attraverso il socket, ad esempio:
Java:
// ServerSocket in ascolto
Socket socket = serverSocket.accept();

try
{
    OutputStream out = socket.getOutputStream();

    String message1 = "Prova 1";
    String message2 = "Prova 2";
    String message3 = "Prova 3";
    
    out.write(message1.getBytes()); // arriva
    out.flush();
    
    out.write(message2.getBytes()); // arriva
    out.flush();
    
    out.write(message3.getBytes()); // non arriva
    out.flush();
}
catch (Exception e)
{
    e.printStackTrace();
}

Sto sviluppando una chat per l'esame, e come endpoint c'è un websocket (ovviamente i messaggi vengono mandati correttamente), ma anche se arrivano correttamente comunque il terzo messaggio non arriva.
Come posso risolvere? Grazie in anticipo.
 

DispatchCode

Moderatore
Staff Forum
Utente Èlite
2,223
1,854
CPU
Intel I9-10900KF 3.75GHz 10x 125W
Dissipatore
Gigabyte Aorus Waterforce X360 ARGB
Scheda Madre
Asus 1200 TUF Z590-Plus Gaming ATX DDR4
HDD
1TB NVMe PCI 3.0 x4, 1TB 7200rpm 64MB SATA3
RAM
DDR4 32GB 3600MHz CL18 ARGB
GPU
Nvidia RTX 3080 10GB DDR6
Audio
Integrata 7.1 HD audio
Monitor
LG 34GN850
PSU
Gigabyte P850PM
Case
Phanteks Enthoo Evolv X ARGB
Periferiche
MSI Vigor GK30, mouse Logitech
Net
FTTH Aruba, 1Gb (effettivi: ~950Mb / ~480Mb)
OS
Windows 10 64bit / OpenSUSE Tumbleweed
Sono un pò arrugginito con Java, su due piedi non mi vengono in mente soluzioni; dipende come hai realizzato client-server.
Puoi postare il codice completo?
 

JDany

Utente Attivo
461
24
CPU
Ryzen 9 3900x
Scheda Madre
ASUS H170-Pro
RAM
Corsair Vengeance LPX 2x8 GB
GPU
ZOTAC RTX 3070 TWIN EDGE OC
Monitor
Philips Gaming Monitor 24"
PSU
Corsair CX450M
Case
Sharkoon VS4-V
OS
Windows 11 Pro
Sono un pò arrugginito con Java, su due piedi non mi vengono in mente soluzioni; dipende come hai realizzato client-server.
Puoi postare il codice completo?
Tutto il codice è un problema, però ti posso linkare dove è il problema.
L'errore è in questo file: https://github.com/J-Dany/Chat/blob/master/server/src/main/java/Chat/server/ClientConnection.java alle linee 82, 83 (ovviamente la 82 non è commentata, lo è su github perché ancora non ho fatto il commit delle nuove modifiche).

Comunque cerco di descrivere il comportamento che dovrebbe avere l'applicazione:
  • Il client si collega al ServerSocket
  • Il server accetta la connessione e per stabilire la connessione rimanda il pacchetto HTTP con 101 Switching Protocols e altri header necessari al websocket
  • Una volta stabilita la connessione, il client mostra il form di login
  • L'utente immette i propri dati, invia un json al server contenente i dati necessari al login
  • Il server riceve il json, prende i dati necessari e lo autentica (consideriamo il login corretto)
  • Il server risponde mandando un json contente la risposta del login, dopodiché invia la lista degli amici e notifica ai suoi amici online l'avvenuta connessione
Posto uno screenshot di quello che ricevo:
Cattura.PNG
Come si può vedere, io mi sono loggato con J_Dany, ricevo la lista degli amici. Dopodiché l'utente MRossi si logga, quindi anche lui riceve il messaggio di login ok e riceve la lista degli amici; una volta ricevuti i dati notifica a me (J_Dany) che lui (MRossi) si è connesso.
Tra l'altro mi ero dimenticato inoltre di dire che tutti i messaggi arrivano correttamente tranne il terzo che Chrome dice che arriva mascherato quando non lo è.

Riattacondomi al primo messaggio di questo thread: il server manda 2 messaggi a MRossi e il terzo messaggio, che viene mandato ad un altro, non viene ricevuto o comunque arriva corrotto. Il socket connesso a J_Dany non può mandare più di 2 messaggi.
 

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!