Je crée un programme multi-client/serveur standard en Java. Le serveur accepte les connexions et génère un nouveau thread pour gérer chacun d'eux. Le client génère également un thread pour attendre les messages du serveur. Le client et le serveur communiquent en passant des objets Message via ObjectInputStream et ObjectOutputStreams.Problème client/serveur Java envoyant des objets sur des sockets
La poignée de main initiale fonctionne correctement. Lorsque le client démarre, il ouvre une connexion socket au serveur. Le serveur accepte le socket, envoie un message au client indiquant que la connexion a réussi. Ensuite, le client renvoie son nom d'utilisateur et le client et le serveur commencent à attendre les messages. Ensuite, j'envoie du texte à mon client qui crée un message de discussion, et l'envoie avec succès au serveur. Le serveur reçoit ce message et tente de l'envoyer à tous les clients connectés, ce qu'il fait (il n'y en a qu'un). Le problème est que ce message ne revient jamais au client.
// This is Message.send
public void send(ObjectOutputStream stream) throws IOException{
stream.writeObject(this);
}
// ClientThread.run
public void run(){
try {
out = client.getOutputStream();
out.flush();
ObjectInputStream in = client.getInputStream();
Message msg = null;
int len;
byte[] bytes = null;
int i = 0;
// Continuously read new Messages from the server
while(true){
msg = (Message)in.readObject();
processInput(msg);
}
} catch (Exception e) {
Util.showError(e.getMessage(), "Connection Error");
}
System.out.println("Client exited");
}
// ServerThread.run
public void run() {
try {
out = new ObjectOutputStream(client.getOutputStream());
ObjectInputStream in = new ObjectInputStream(client.getInputStream());
Message msg = null;
while(client.isConnected()){
msg = (Message)in.readObject();
processInput(msg);
}
in.close();
client.close();
} catch (Exception e) {
server.addMessage(e.getMessage());
}
}
Um, envisagez-vous d'utiliser SOAP ou REST plutôt que de vous embêter? – bmargulies
C'est un exercice donc je peux m'entraîner avec des sockets à un niveau inférieur sans utiliser un protocole existant. – Jared