Skip to Main Content

Java Programming

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

DataOutputStream vs PrintWriter?

807569Sep 18 2006
I have made a simple client/server app using PrintWriter as my out channel and BufferedReader as my in channel. But if I use DataOuputStream and DataInputStream instead the program does not work and the client just blocks.

why?

the below is the not working example with DataOut/In streams. If I replace them with PrintWriter/BufferedReader it works without blocks!
import java.io.*;
import java.net.*;


public class Server {

	public static void main(String[] args) {

        ServerSocket serverSocket = null;
        Socket ss = null;
        DataInputStream in = null;
        DataOutputStream out = null;
        //BufferedReader in = null;
        //PrintWriter out = null;      

		try
		{
			serverSocket = new ServerSocket(4444);
			ss = serverSocket.accept();
			 

			//in = new BufferedReader(new InputStreamReader(ss.getInputStream()));
			in = new DataInputStream(ss.getInputStream());
			out = new DataOutputStream(ss.getOutputStream());
			//out = new PrintWriter(ss.getOutputStream());
			 
			String fromClient;
			 
			while ((fromClient = in.readLine()) != null)
			{
				out.writeBytes(fromClient + " received at server!");
				out.flush();
				System.out.println(fromClient);
			}
			 
			serverSocket.close();
        }
		catch (IOException e)
		{
			e.printStackTrace();
		}
	}
}





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

public class Client {

	public static void main(String[] args) {
		Socket socket = null;
		DataOutputStream out = null; // use PrintWriter.
		DataInputStream in = null;   // use BufferedReader.
		BufferedReader user = null;
		try
		{
			String fromServer, fromUser;
			
			// Connect to server.
			socket = new Socket("localhost",4444);
			
    		// Out channel.
			out = new DataOutputStream(socket.getOutputStream());

    		// In channel.
			in = new DataInputStream(socket.getInputStream());
			
			// Input from user.
    		user = new BufferedReader(new InputStreamReader(System.in));

    		while ((fromUser = user.readLine()) != null)
    		{
    			out.writeBytes(fromUser);
    			out.flush();
    			
    			fromServer = in.readLine();
    			System.out.println(fromServer);
    		}
    		
		
		}
		catch(Exception e)
		{
			System.out.println(e.getMessage());
		}
	}

}
Comments
Locked Post
New comments cannot be posted to this locked post.
Post Details
Locked on Oct 16 2006
Added on Sep 18 2006
0 comments
843 views