serveur ne recevant pas de données du client java tcp / ip


J'écris actuellement un client java pour me connecter à un serveur distant et y pousser du texte brut. Je n'ai aucune idée de la langue dans laquelle se trouve le serveur, on me dit de simplement me connecter à une adresse IP sur un certain port, puis de pousser des données.

Je me connecte très bien (apparemment), et de mon côté, il semble que les données soient envoyées correctement. Cependant, à l'extrémité du serveur, ils ne me voient que se connecter/déconnecter, sans qu'aucune donnée ne soit reçue.

Je suis nouveau sur TCP / IP et les sockets en Java, et je me demande si je fais peut-être quelque chose de bancal de ma part.

Fondamentalement, mon client Java trouve tout .txt fichiers dans un certain répertoire, prend le texte de ces fichiers, puis pousse ce texte à travers le flux de sortie. Une fois les données d'un fichier vidées, il déplace le fichier vers un répertoire "envoyé", puis continue vers le fichier suivant (le cas échéant).

Voici mon code Java:

import java.net.*;
import java.io.*;

public class Client
{

public class MyFileFilter implements FilenameFilter {
    public boolean accept(File dir, String name) {
        return name.toLowerCase().endsWith(".txt");
    }
}

public Client()
{
    try {

        String dirName = "/var/lib/adt/";
        String sentDir = "/var/lib/adt/sent/";

        File directory = new File(dirName);
        if (!directory.exists()) {
            System.out.println("directory does not exist!  Location: " + dirName);
            return;
        }

        // get files in directory
        File[] listOfFiles = directory.listFiles(new MyFileFilter());

        if (listOfFiles == null || listOfFiles.length == 0) {
            System.out.println("No files to send.");
            return;
        }

        FileInputStream fin;
        DataInputStream dis;

        String sendAddr = "192.168.1.9";
        int sendPort = 9486;

        Socket client = new Socket(sendAddr, sendPort);
        //getting the o/p stream of that connection
        PrintStream out = new PrintStream(client.getOutputStream());
        //reading the response using input stream
        BufferedReader in= new BufferedReader(new InputStreamReader(client.getInputStream()));

        System.out.println("Sending file(s) to '" + sendAddr + ":" + sendPort + "'");

        for (int i = 0; i < listOfFiles.length; i++)  {
            if (listOfFiles[i].isFile())  {
                String fName = listOfFiles[i].getName();
                if (fName.endsWith(".txt") || fName.endsWith(".TXT")) {
                    fin = new FileInputStream (dirName + fName);
                    dis = new DataInputStream(fin);

                    String message = "";
                    String messagePart = "";
                    while ((messagePart = dis.readLine()) != null)
                        message += messagePart + "\n";

                    if (message.equals(""))
                        continue;

                    System.out.println("Sending file '" + fName + "' with message: " + message);

                    out.print(message);
                    System.out.println("Written!");
                    out.flush();
                    System.out.println("Flushed!");

                    // move file to 'sent' directory
                    File dir = new File(sentDir);

                    boolean success = listOfFiles[i].renameTo(new File(dir, fName));
                    if (!success) {
                        // File was not successfully moved
                        System.out.println("File not successfully moved to 'sent' directory.");
                    }

                    dis.close();
                    fin.close();
                }
            }
        }

        in.close();
        out.close();

        client.shutdownOutput();
        if (!client.isClosed())
            client.close();

        System.out.println("Successfully sent all file(s)!");
    } catch (Exception e) {
        System.out.println("ERROR while sending file: " + e.toString());
        e.printStackTrace();
    }

}

public static void main(String a[])
{
    new Client();
}

}

Pour ma sortie de console, j'obtiens ceci:

jarrett@jarrett-Latitude-D520:~/Downloads$ java Client 
Sending file(s) to '192.168.1.9:9486'
Sending file 'blah.txt' with message: asdpoifjawpeoifjawpeoifjwapoeifjapwoie

Written!
Flushed!
Successfully sent all file(s)!

Pour autant que je sache, tout va bien sur ma fin. Est-ce que quelqu'un sait pourquoi cela pourrait se produire? Y a-t-il quelque chose que je fais évidemment mal de mon côté??

J'apprécie tout commentaire!

Vive

Jarrett

EDIT: Aussi, juste pour mentionner, j'ai écrit un fichier java 'Serveur' pour tester localement, et j'ai réussi à m'y connecter et à lui envoyer des données à partir de mon programme client avec succès.

Author: Jarrett, 2012-02-13

1 answers

Jarrett, votre code envoie *quelque chose; il a l'air bien et vous videz correctement le flux afin d'éviter qu'il ne sauvegarde le tampon et ne se perde lorsque vous le fermez.

Si vous voulez être absolument sûr que vous envoyez quelque chose, installez Wireshark, faire la connexion, puis renifler comme vous envoyez vos données. Vous devriez voir le trafic sortant que vous envoyez.

Si vous le voyez, vous pouvez informer le client que son service ne reçoit pas les données correctement. Je suppose qu'il y a plus d'exigences pour utiliser leur point de terminaison qu'ils ne vous en ont encore communiqué (par exemple, en-têtes, encodage, format, etc.) et de leur côté, il y a probablement une erreur d'analyse tuant le traitement de vos données, donc ils supposent simplement que vous n'envoyez jamais rien parce qu'ils ne voient pas un résultat traité stocké dans une base de données ou quelque chose d'équivalent.

Juste une supposition cependant.

 1
Author: Riyad Kalla, 2012-02-13 16:41:05