Question

I'm recently learning how to create sockets to connect to a webserver. I've managed to write a little something in Java:

    BufferedReader inUser = new BufferedReader(new
    InputStreamReader(System.in));

    Socket clientSocket = new Socket("www.google.com", 80);  // url expected

    DataOutputStream outServer = new DataOutputStream
            (clientSocket.getOutputStream());
    BufferedReader inServer = new BufferedReader(new
            InputStreamReader(clientSocket.getInputStream()));

    String sentence = inUser.readLine();
    outServer.writeBytes(sentence + '\n');

    String modifiedSentence = inServer.readLine();

    System.out.println("FROM SERVER: " + modifiedSentence);

    inUser.close();
    outServer.close();
    inServer.close();
    clientSocket.close();

I'm also using a socketTest program (from http://sockettest.sourceforge.net/) to test my client. The connection seems fine and I can use the sockettest to receive and send back messages (by hosting a local server). When I try to send a string to a webserver (in my java code it's named 'sentence'), it returns bad requests for random input like 'sd' or 'a', as expected. However, when I type the query I wished to receive feedback on, I don't receive anything. To be sure, this is what I put in (stored in 'sentence'):

GET index.html http/1.0

Either I should get the file if it exists or an exception if something went wrong, right? I don't receive anything though. Stranger yet, I've noticed that the first time I give input, I just have to make sure I have 3 separate random strings (separated by space) to have it accepted as valid input. And any random input I enter afterwards, like 'sd' will also be accepted.

Another observation I made is that the program keeps running. Normally I should read a single line then the program stops. This means it wasn't able to read anything.

I'm using port 80 for all the pages I've tried. Here's a small list of websites I've tried to perform a query on: - www.google.com - en.wikipedia.org - www.cracked.com

I've tried a few others setup for the sole purpose of tutorials. Why don't I receive anything? When I tried it with telnet some seemed to work (though www.google.com always returned a xxx error found).

Was it helpful?

Solution

Try writing an additional "\r\n" before flushing the output stream:

BufferedReader inUser = new BufferedReader(new InputStreamReader(System.in));
URL url = new URL("http://www.google.com");
Socket clientSocket = new Socket(url.getHost(), 80);  // url expected
OutputStream output = clientSocket.getOutputStream();
PrintWriter pw = new PrintWriter(output,false);
pw.print("GET index.html HTTP/1.0\r\n");
pw.print("\r\n");
pw.flush();
BufferedReader input = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));

String modifiedSentence = input.readLine();
System.out.println("FROM SERVER: " + modifiedSentence);
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top