Nous devons implémenter un client Socket qui doit se connecter à un serveur qui accepte les connexions TCP. Si je communique via netcap avec le serveur, j'obtiens des réponses immédiates (via une ligne de commande).Java envoyer et recevoir plusieurs messages via Socket
Le workflow est:
nc 99.0.99.84 20000
puis-je envoyer une demande de connexion au serveur
*99*0##
je reçois la réponse ACK
*#*1##
J'envoyer ma demande
*#18*802*86##
je reçois la réponse au
*#18*802*86*222241400##*#*1##
tout est très rapide via la ligne de commande.
Alors je tente de le faire avec un client Socket de cette façon
try {
Socket socket = new Socket("99.0.99.84", 20000);
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
System.out.println("Start");
Thread.sleep(1000);
String connectionRequest ="*99*0##";
System.out.println("Sending connection request " + connectionRequest);
out.println(connectionRequest);
String connResponse = in.readLine();
System.out.println("Response to connection is " + connResponse);
Thread.sleep(500);
String payload ="*#18*802*86##";
System.out.println("Sending " + payload);
out.println(payload);
String response = in.readLine();
System.out.println("Response is " + response);
out.close();
in.close();
socket.close();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
Lors de son utilisation, le client prend la réponse de connexion dans beaucoup de temps puis se ferme avec réponse = null
Sending connection request*99*0##
Response to connection is *#*1##*#*1##
Sending *#18*802*86##
Response is null
Y at-il un problème?
La réponse se termine-t-elle par "\ r", "\ n" ou "\ r \ n'"? 'readLine' lira jusqu'à ce point et attendra jusqu'à ce qu'il l'obtienne. – icabod
non ... il n'y a pas d'élément de fin de ligne ... – besmart
grâce à votre commentaire j'ai résolu en utilisant un read() en lisant char par char – besmart