3

I am trying to connect a client with gui with a server withoout gui. Connection is being done, but i cant see any messages between these two apps. (i should get SERVER HERE in client, and CLIENT HERE in server)

Client Connection Code:

@Override public void ClientRunning(){ try { connectToServer(); setStreams(); ClientRun(); }catch(EOFException oefException){ showMessage("\n Client terminated the connection\n"); }catch(IOException ioException){ ioException.printStackTrace(); }finally{ close(); } } public void connectToServer() throws IOException{ showMessage("Attempting Connection... \n"); connection = new Socket(InetAddress.getByName(serverIP),6789); showMessage("Connected to: "+ connection.getInetAddress().getHostName()); } public void setStreams() throws IOException{ output = new PrintWriter(connection.getOutputStream(),true); output.flush(); input= new BufferedReader(new InputStreamReader(connection.getInputStream())); showMessage("\n Streams are now set. \n"); } public void close(){ showMessage("\n closing..."); try{ output.close(); input.close(); connection.close(); }catch(IOException ioException){ ioException.printStackTrace(); } } public void showMessage(final String text){ SwingUtilities.invokeLater(new Runnable(){ public void run(){ cwindow.append(text); } }); } public void sendMessage(String message){ output.write("CLIENT - "+message); output.flush(); showMessage("\nCLIENT - "+message); } private void ClientRun() throws IOException{ String message="CLIENT HERE!"; sendMessage(message); do{ try{ message=input.readLine(); showMessage("\n"+message); }catch(EOFException eofException){ showMessage("\n Server ended the connection!"); } }while(message!="EXIT"); } 

(input and output are defined in GUI class in which this Client class is extended to. Defined as "protected BufferedReader input; protected PrintWriter output;")

Also, servers code:

public class ServerClass { private ServerSocket server; private Socket connection; private BufferedReader input; private BufferedWriter output; public void startServer(){ try{ server=new ServerSocket(6789,100); while(true){ try{ waitForConnection(); setStreams(); ServerRunning(); }catch(EOFException eofException){ showMessage("\n Server ended the connection!"); }finally{ close(); } } }catch(IOException ioException){ ioException.printStackTrace(); } } private void waitForConnection() throws IOException{ showMessage("Waiting for someone to connect... \n"); connection=server.accept(); showMessage("Now connected to "+ connection.getInetAddress().getHostName()); } private void setStreams() throws IOException{ output = new BufferedWriter(new OutputStreamWriter(connection.getOutputStream())); output.flush(); input= new BufferedReader(new InputStreamReader(connection.getInputStream())); showMessage("\n Streams are now set. \n"); } public void ServerRunning() throws IOException{ String message="SERVER HERE!"; sendMessage(message); do{ try{ message=input.readLine(); showMessage("\n"+message); }catch(EOFException eofException){ showMessage("\n Server ended the connection!"); } }while(message!="EXIT"); } private void close(){ showMessage("\n Closing connections... \n"); try{ output.close(); input.close(); connection.close(); }catch(IOException ioException){ ioException.printStackTrace(); } } private void showMessage(String text){ System.out.println(text); } private void sendMessage(String message){ try{ output.write("SERVER - "+message); output.flush(); showMessage(message); }catch(IOException ioException){ System.out.println("\n ERROR!"); } } 

Connection seems to be ok, so i don't get whats wrong. Any help would be appreciated.

PS: i also tried PrintWriter in server as well and also tried a try catch in stream statement, the problem remains.

1
  • The flush() in setStreams() is pointless. You haven't written anything yet, so there is nothing to flush. Your server structure doesn't support multiple clients. Commented Mar 29, 2017 at 18:04

3 Answers 3

2

You're using readLine() which expects a newline character. either add a \n to the messages you are sending or don't use readLine().

Sign up to request clarification or add additional context in comments.

Comments

1

[SOLVED] As TedTrippin and Alfie mentioned readline(), messed my code. After adding "\n" in each message, everything seems to work smooth! I also changed printwriter to bufferwritter in client code, and i also added a try-catch function in sendMessage, cause printwritter seems to cause some problem as well for some reason. Anyway, everything is set and done! Thanks guys!

UPDATED CLIENT CODE:

private void ClientRun() throws IOException{ String message="CLIENT HERE! \n"; <----added \n here. sendMessage(message); do{ try{ message=input.readLine(); showMessage("\n"+message); }catch(EOFException eofException){ showMessage("\n Server ended the connection!"); } }while(message!="EXIT"); } public void sendMessage(String message){ try{ <-----added try-catch statement output.write("CLIENT - "+message+"\n"); <----adding "\n" here is super userful, instead of having to add \n in each message. output.flush(); showMessage(message); }catch(IOException ioException){ System.out.println("\n ERROR!"); } } protected BufferedReader input; protected BufferedWriter output; <----changed printwriter to BufferWriter 

UPDATED SERVER CODE:

public void ServerRunning() throws IOException{ String message="SERVER HERE! \n"; <--- added \n here as well. sendMessage(message); do{ try{ message=input.readLine(); showMessage("\n"+message); }catch(EOFException eofException){ showMessage("\n Server ended the connection!"); } }while(message!="EXIT"); 

}

Thanks guys!

Comments

0

After compairing this code with some I have written in the past using sockets , I noticed you are using output.write(string) and input.readline() - These do not mix well, readline() expects a newline and write does not give one.

Replace write() with println().

4 Comments

well the project has in terms, not to use threads, which makes it a little more tricky... But thanks for the reply.
@b10z oh okay, you could still try this without using another thread and see if that was the problem.
but you are running the server and client separately right?
Sure dude, they are completely different projects. Everything is set right, since i get connection message with the ip, but thats all. Connection doesnt close, but dont get the SERVER HERE and CLIENT HERE message, as i was supposed to...

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.