сервер не получает данные от клиента TCP / IP Java - PullRequest
0 голосов
/ 13 февраля 2012

В настоящее время я пишу Java-клиент для подключения к удаленному серверу и отправки на него простого текста.Я понятия не имею, на каком языке сервер, мне говорят просто подключиться к IP-адресу на определенном порту, а затем отправить данные.

Я подключаюсь очень хорошо (по-видимому), и на моем концепохоже, данные отправляются нормально.Однако на стороне сервера они видят только мое подключение / отключение без каких-либо данных.

Я новичок в TCP / IP и сокетах в Java, и мне интересно, возможно, я делаючто-то странное с моей стороны.

По сути, мой Java-клиент находит все файлы .txt в определенном каталоге, берет текст из этих файлов, а затем проталкивает этот текст через выходной поток.После того, как данные файла были сброшены, он перемещает файл в «отправленный» каталог и затем переходит к следующему файлу (если есть).

Вот мой код 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();
}

}

Для вывода на консоль я получаю следующее:

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)!

Так что, насколько я могу судить, все хорошо с моей стороны.Кто-нибудь знает, почему это может происходить?Есть что-то, что я явно делаю неправильно с моей стороны ??

Я ценю любые отзывы!

Приветствия

Джарретт

РЕДАКТИРОВАТЬ: Кроме того, простоОтметим, что я написал Java-файл «Сервер» для локального тестирования, и мне удалось подключиться к нему и успешно отправить данные из моей клиентской программы.

1 Ответ

1 голос
/ 13 февраля 2012

Джарретт, ваш код отправляет * что-то; это выглядит хорошо, и вы корректно очищаете поток, чтобы избежать его резервного копирования и потери при закрытии.

Если вы хотите быть абсолютно уверенным, что отправляете что-либо, установите Wireshark , установите соединение, затем прослушайте его, когда вы отправляете свои данные. Вы должны увидеть исходящий трафик, который вы отправляете.

Если вы видите это, то вы можете сообщить клиенту, что его служба не получает данные правильно. Я предполагаю, что существует больше требований для использования их конечной точки, чем они вам сообщили (например, заголовки, кодирование, формат и т. Д.), И с их стороны, вероятно, возникнет ошибка синтаксического анализа, убивающая обработку из ваши данные, поэтому они просто предполагают, что вы никогда ничего не отправляете, потому что они не видят обработанный результат, сохраненный в БД или что-то подобное.

Просто предположение, хотя.

...