Client blocks!

E

eksamor

I have this simple client/server application, but for some reason the
client blocks after typing the first input (of course the server is
running an the client is connected):

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


public class Server {

public static void main(String[] args) {

ServerSocket serverSocket = null;
Socket ss = null;
BufferedReader in = null;
PrintWriter out = null;


try {
serverSocket = new ServerSocket(4444);

System.out.println("CRAP1");
ss = serverSocket.accept();
System.out.println("CRAP2");
in = new BufferedReader(new
InputStreamReader(ss.getInputStream()));
out = new PrintWriter(ss.getOutputStream());

String bob = null;

while ((bob = in.readLine()) != null)
{
System.out.println("CRAP3");
out.println(bob + "from server");
System.out.println(bob);
}
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;
PrintWriter out = null;
BufferedReader in = null;
BufferedReader user = null;
try
{
String fromServer, fromUser;

// Connect to server.
socket = new Socket("localhost",4444);

// Out channel.
out = new PrintWriter(socket.getOutputStream());

// In channel.
in = new BufferedReader(new
InputStreamReader(socket.getInputStream()));

// Input from user.
user = new BufferedReader(new InputStreamReader(System.in));

while ((fromServer = in.readLine()) != null)
{
System.out.println(fromServer);
fromUser = user.readLine();

if (fromUser != null)
{
out.println(fromUser);
}
}


}catch(Exception e)
{
System.out.println(e.getMessage());
}
}

}
 
M

Martin Lansler

Hi,

The basic problem is that you are trying to read a line of text from
both the server and client at the same time without sending a line
first. I.e server starts by waiting for a line of text and the client
also starts by waiting for a line of text, hence it hangs...

I modified the programs slighly so that the client starts by sending a
line of text until the user enters a null or empty line, in which case
the client closes the stream and socket. In this case the server will
also close down, in a real application you probably want to start a new
worker thread for each acceted client connection....

Regards,
Martin Lansler

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

public class Client {

public static void main(String[] args) {
Socket socket = null;
PrintWriter out = null;
BufferedReader in = null;
BufferedReader user = null;
try {
String fromServer, fromUser;

// Connect to server.
socket = new Socket("localhost", 4444);

// Out channel.
out = new PrintWriter(socket.getOutputStream());

// In channel.
in = new BufferedReader(new
InputStreamReader(socket.getInputStream()));

// Input from user.
user = new BufferedReader(new
InputStreamReader(System.in));

while (out != null) {
fromUser = user.readLine();

if (fromUser != null && !"".equals(fromUser)) {
out.println(fromUser);
out.flush();
fromServer = in.readLine();
System.out.println(fromServer);
} else {
out.close();
out = null;
socket.close();
}
}

} catch (Exception e) {
System.out.println(e.getMessage());
}
}
}


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

public class Server {

public static void main(String[] args) {

ServerSocket serverSocket = null;
Socket ss = null;
BufferedReader in = null;
PrintWriter out = null;

try {
serverSocket = new ServerSocket(4444);

System.out.println("CRAP1");
ss = serverSocket.accept();
System.out.println("CRAP2");
//
in = new BufferedReader(new
InputStreamReader(ss.getInputStream()));
out = new PrintWriter(ss.getOutputStream());

String bob = null;

while ((bob = in.readLine()) != null) {
System.out.println("CRAP3");
out.println(bob + " from server");
out.flush();
System.out.println(bob);
}
serverSocket.close();
}

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

}


I have this simple client/server application, but for some reason the
client blocks after typing the first input (of course the server is
running an the client is connected):

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


public class Server {

public static void main(String[] args) {

ServerSocket serverSocket = null;
Socket ss = null;
BufferedReader in = null;
PrintWriter out = null;


try {
serverSocket = new ServerSocket(4444);

System.out.println("CRAP1");
ss = serverSocket.accept();
System.out.println("CRAP2");
in = new BufferedReader(new
InputStreamReader(ss.getInputStream()));
out = new PrintWriter(ss.getOutputStream());

String bob = null;

while ((bob = in.readLine()) != null)
{
System.out.println("CRAP3");
out.println(bob + "from server");
System.out.println(bob);
}
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;
PrintWriter out = null;
BufferedReader in = null;
BufferedReader user = null;
try
{
String fromServer, fromUser;

// Connect to server.
socket = new Socket("localhost",4444);

// Out channel.
out = new PrintWriter(socket.getOutputStream());

// In channel.
in = new BufferedReader(new
InputStreamReader(socket.getInputStream()));

// Input from user.
user = new BufferedReader(new InputStreamReader(System.in));

while ((fromServer = in.readLine()) != null)
{
System.out.println(fromServer);
fromUser = user.readLine();

if (fromUser != null)
{
out.println(fromUser);
}
}


}catch(Exception e)
{
System.out.println(e.getMessage());
}
}

}
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,774
Messages
2,569,599
Members
45,165
Latest member
JavierBrak
Top