Results 1 to 2 of 2
  1. #1
    paul is offline Member
    Join Date
    Jul 2007
    Posts
    26
    Rep Power
    0

    Default Programming Socket Question

    Can anyone tell me how to change the client and server classes so that when I run them whatever is typed in the client window appears on the server window? As it is, it just prints "what's up" and ends.
    I need to be able to type, hit enter and have whatever I typed show up on the server window.
    Java Code:
    import java.net.Socket;
    import java.net.InetAddress;
    import java.net.UnknownHostException;
    import java.io.*;
    //import java.lang.System;
    
    public class Client
    {
      public static void main (String args[]){
      	InetAddress ip=null;
      	Socket sock=null;
    	try {
    		ip = InetAddress.getLocalHost();
    		sock = new Socket(ip, 2001);
    	} 
    	catch (UnknownHostException e1) {
    		e1.printStackTrace();
    	}
    	catch (IOException e2) {
    		e2.printStackTrace();
    	}
    	BufferedWriter dataOut=null;
        String message = "What's Up?\n";
    
        System.out.println ("Sending "+ message + " ...");
        try{
        	 dataOut = new BufferedWriter (new OutputStreamWriter (sock.getOutputStream ()));
        	 dataOut.write (message, 0, message.length ());
        	 dataOut.flush ();
        	 sock.close ();
        }
        catch(IOException e){
        	System.out.println(e.getMessage());
        }
      }
    }
    Java Code:
    import java.net.ServerSocket;
    import java.net.Socket;
    import java.io.*;
    
    public class Server
    {
      public static void main (String args[])
      {
        ServerSocket serverSock=null;
        Socket sock=null;
        BufferedReader dataIn=null;
        String message;
    
      	try{
      		serverSock = new ServerSocket (2001);
    	}
      	catch (IOException e) {
    		e.printStackTrace();
    	}
    
        System.out.println ("Server starting ...");
        try {
    		sock = serverSock.accept();
    	}
        catch (IOException e1) {
    		e1.printStackTrace();
    	}
    
        try{
    		dataIn = new BufferedReader(new InputStreamReader(sock.getInputStream()));
    		message=dataIn.readLine();
    		System.out.println (message);
    	    sock.close ();
    	}
        catch (IOException e2) {
            System.out.println (e2.getMessage());
    	}
    
    
    
        try{
        	serverSock.close ();
    	}
        catch(IOException e3) {
    		e3.printStackTrace();
    	}
      }
    }
    Thanks.

  2. #2
    brianhks is offline Senior Member
    Join Date
    Jul 2007
    Posts
    135
    Rep Power
    0

    Default

    On the client wrap System.in in a BufferedReader. Then loop on in.readLine(). Each time you get a line from the command line send it down the socket and call flush but, don't call close().

    On the server loop around dataIn.readLine like so.
    while (message=dataIn.readLine() != null)
    Again leave the socket open.

    To end the program and socket look for a keyword on the client like "exit" that will then end the loop and close the socket.

    On the server the readLine will either return null or an exception will be thrown and it can end as well.

Similar Threads

  1. Question mark colon operator question
    By orchid in forum Advanced Java
    Replies: 9
    Last Post: 12-19-2010, 09:49 AM
  2. Socket programming - accepting files
    By ravian in forum Networking
    Replies: 2
    Last Post: 11-29-2007, 11:40 AM
  3. Socket programming - port issues
    By ravian in forum Networking
    Replies: 2
    Last Post: 11-07-2007, 11:24 AM

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •