eager2learn
eager2learn

Reputation: 1488

ServerSocket cannot read input from Client

I'm new to socket programming and I'm just trying out a few things. What I'm trying to do is have a Client that reads a text file, saves the lines from that file in an ArrayList and then send the lines to the Server. This is my code. The connection is successfully established, but when the server tries to read from his BufferedReader, it doesn't get anything:

Server:

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

    public class Server extends Thread{
        ServerSocket sock = null;
        Socket client_sock = null;
        PrintWriter out = null;
        BufferedReader in = null;


        Server(int port){
            try{
            sock = new ServerSocket(port);
        }catch(IOException e){
            System.out.println("Couldn't create server socket");
            e.printStackTrace();
        }
        }

        public void run(){
            while (true){
                try{
                    client_sock = sock.accept();
                    System.out.println("Successfully connected to client" + client_sock);
                    System.out.println(client_sock.getOutputStream());
                    System.out.println(client_sock.getInputStream());
                    out = new PrintWriter(client_sock.getOutputStream(),true);
                    //System.out.println(out);
                    in = new BufferedReader(new InputStreamReader(client_sock.getInputStream()));
                    //System.out.println(in);
                    System.out.println("Trying to read line sent from client:");
                    String l;
                    try{    
                        l = in.readLine();
                        System.out.println(l);
                    }catch(IOException e){
                        System.out.println("Couldn't read line from client");
                        e.printStackTrace();}

                }catch(IOException e){
                    e.printStackTrace();
                    break;
                }
            }



        }

        public static void main(String[] args){
            //Thread t = new Server(Integer.parseInt(args[0]));
            //t.start();
            Server serv = new Server(10239);
            System.out.println(serv.sock);
            serv.run();

        }


    }

Client:

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

public class Client {
    Socket sock = null;
    OutputStream toServer = null;
    PrintWriter out = null;
    InputStream fromServer = null;
    BufferedInputStream in = null;
    Client(int port){
        try{
            sock = new Socket("localhost",port);
            //System.out.println(sock.getPort());
            //System.out.println(sock.getOutputStream());
            //System.out.println(sock.getInputStream());
            //toServer = sock.getOutputStream();
            //System.out.println(sock.getOutputStream());
            out = new PrintWriter(sock.getOutputStream());
            //System.out.println(out);
            //fromServer = sock.getInputStream();
            in = new BufferedInputStream(sock.getInputStream());
            //System.out.print(in);
        }catch(UnknownHostException ue){
            System.out.println("Host not known");
        }
        catch(IOException e){
            e.printStackTrace();
        }
    }

    public static void main(String[] args){
        Client client = new Client(Integer.parseInt(args[0]));
        File f = new File("/Users/--------/Desktop/socket_test.txt");
        BufferedReader f_in = null;
        try{    
            f_in = new BufferedReader(new FileReader(f));
        }catch(IOException e){
            System.out.println("Cannot create FileReader for test file");
        }

        String line;
        ArrayList<String> text = new ArrayList<String>();
        try{
            while ((line = f_in.readLine()) != null){
                text.add(line);
            }
        }catch(IOException e){
            e.printStackTrace();
        }

        //System.out.println("first line of file");
        //System.out.println(text.get(0));


        for (String l : text){
            System.out.println("Sent the following line:");
            System.out.println(l);
            client.out.println(l);
        }

    }
}   

This is the output I get for the Client:

Sent the following line:
Similar to the previous constructor 
Sent the following line:
the InetAddress parameter specifies 
Sent the following line:
the local IP address to bind to. 
Sent the following line:
The InetAddress is used for servers that 
Sent the following line:
may have multiple IP addresses
Sent the following line:
allowing the server to specify which of 
Sent the following line:
its IP addresses to accept client requests on

and this for the Server:

ServerSocket[addr=0.0.0.0/0.0.0.0,localport=10239]
Successfully connected to clientSocket[addr=/127.0.0.1,port=58285,localport=10239]
Trying to read line sent from client:
null

I can't find the reason why this doesn't work, can anybody help me please?

Upvotes: 0

Views: 709

Answers (1)

Arnaud
Arnaud

Reputation: 17534

Try to flush the stream after each line :

client.out.println(l);
client.out.flush();

Upvotes: 5

Related Questions