TCP Socket Client. Se connecter et attendez flux d'entrée
J'ai une carte wifi sd qui m'envoie des paquets TCP avec des informations sur de nouvelles images sur le mémoire après je prends une photo avec l'appareil photo.
Sur le terminal, je peux lire le inputstream avec cette commande netcat. netcat se connecte à la propriété intellectuelle 192.168.11.254 et écouter sur le port 5566. la deuxième ligne est le chemin de l'image que je reçois.
$ nc 192.168.11.254 5566
>/mnt/sd/DCIM/109_0302/IMGP0101.JPG
Sur mon appli, j'ai un client Java socket qui est connecté à la même adresse ip et le port. Mais je ne reçois pas d'inputstream comme dans netcat, rien ne se passe.
void startListenForTCP (){
Thread TCPListenerThread = new Thread(new Runnable() {
@Override
public void run() {
Boolean run = true;
String serverMessage = null;
InetAddress serverAddr = null;
try {
serverAddr = InetAddress.getByName("192.168.11.254");
Socket clientSocket = new Socket(serverAddr, 5566);
try{
BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
while (run) {
serverMessage = in.readLine();
mHandler.post(new DisplayToast(context, "TCP : " + serverMessage));
}
} catch(UnknownHostException e) {
mHandler.post(new DisplayToast(context, "UnknownHostException"));
} catch(IOException e) {
mHandler.post(new DisplayToast(context, "IOException"));
} finally {
clientSocket.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
});
TCPListenerThread.start();
}
Vous devez vous connecter pour publier un commentaire.
essayez cela peut il fonctionne
Étape 1
Supprimer ces deux lignes:
Ajouter cette ligne:
Étape 2
Supprimer ce code:
Ajouter ce code:
La javadoc de
BufferedReader.readLine()
états:Si la carte n'a pas d'envoyer une sorte de fin de ligne, cette méthode ne reviendra jamais. Essayez de lire directyl de
clientSocket.getInputStream()
. Cela ne fait pas de mise en mémoire tampon.echo -e "/mnt/sd/DCIM/109_0302/IMGP0101.JPG\r" | nc 192.168.11.254 5566