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