Jarrett
Jarrett

Reputation: 1778

server not receiving data from java tcp/ip client

I'm currently writing a java client to connect to a remote server and push plain text to it. I have no idea what language the server is in, I'm told to just connect to an IP address on a certain port and then push data.

I am connecting just fine (apparently), and on my end it seems like the data is being sent fine. However, on the server end, they are only seeing me connect/disconnect, without any data being received.

I'm new to TCP/IP and sockets in Java, and am wondering if perhaps I'm doing something wonky on my end.

Basically, my Java Client finds all .txt files in a certain directory, takes the text from those files, and then pushes that text through the output stream. Once a file's data was flushed, it moves the file to a 'sent' directory, and then continues to the next file (if any).

Here's my Java code:

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();
}

}

For my console output I get this:

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

So as far as I can tell, everything is fine on my end. Does anyone know why this might be happening? Is there something I'm obviously doing wrong on my end??

I appreciate any feedback!

Cheers

Jarrett

EDIT: Also, just to mention, I wrote a 'Server' java file to test locally, and managed to connect to it and send it data from my Client program successfully.

Upvotes: 0

Views: 3453

Answers (1)

Riyad Kalla
Riyad Kalla

Reputation: 10702

Jarrett, your code is sending *something; it looks good and you are correctly flushing the stream so as to avoid it backing up the buffer and getting lost when you close it.

If you want to make absolutely sure you are sending something, install Wireshark, make the connection then sniff it as you send your data. You should see the outbound traffic you are sending.

If you see it, then you can let the client know that their service isn't receiving the data correctly. My guess is that there are more requirements for using their endpoint than they have communicated to you yet (e.g. headers, encoding, format, etc.) and on their end there is likely a parse error killing the processing of your data, so they just assume you never send anything because they aren't seeing a processed result stored in a DB or something equivalent.

Just a guess though.

Upvotes: 1

Related Questions