1

I am making a console based java application - which will check the username and password of client. What I want is the data entered by client must enter to server in a line by line format i.e pressing enter must send username data and password for next enter press. But what the problem is - until I quit at the client side the data is not sent to the server. Meaning , when client hits 'Bye.' then the client is closed and server receives the data then. Help me in this regard as this is the first step - later I have to check database with this username and password on server. My codes are as follows :

Server :

import java.net.*;

import java.io.*; 

public class EchoServer2 extends Thread
{ 
 protected Socket clientSocket;

 public static void main(String[] args) throws IOException 
   { 
    ServerSocket serverSocket = null; 

    try { 
         serverSocket = new ServerSocket(2010); 
         System.out.println ("Connection Socket Created");
         try { 
              while (true)
                 {
                  System.out.println ("Waiting for Connection");
                  new EchoServer2 (serverSocket.accept()); 
                 }
             } 
         catch (IOException e) 
             { 
              System.err.println("Accept failed."); 
              System.exit(1); 
             } 
        } 
    catch (IOException e) 
        { 
         System.err.println("Could not listen on port."); 
         System.exit(1); 
        } 
    finally
        {
         try {
              serverSocket.close(); 
             }
         catch (IOException e)
             { 
              System.err.println("Could not close port."); 
              System.exit(1); 
             } 
        }
   }

 private EchoServer2 (Socket clientSoc)
   {
    clientSocket = clientSoc;
    start();
   }

 public void run()
   {
    System.out.println ("New Communication Thread Started");

    try { 
         PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), 
                                      true); 
         PrintWriter out1 = new PrintWriter(clientSocket.getOutputStream(), 
                                      true); 
         BufferedReader in = new BufferedReader( 
                 new InputStreamReader( clientSocket.getInputStream())); 
         BufferedReader in1 = new BufferedReader( 
                 new InputStreamReader( clientSocket.getInputStream())); 

         String inputLine,u,p; 

         while ((u = in.readLine()) != null && (p = in.readLine()) != null) 
             { 
             System.out.println ("U: " + u); 
              out1.println(u); 
              System.out.println ("P: " + p); 
              out1.println(p); 

              if (u.equals("Bye.")) 
                  break; 
             } 

         out1.close(); 
         out.close();
         //in1.close(); 
         in.close(); 
         clientSocket.close(); 
        } 
    catch (IOException e) 
        { 
         System.err.println("Problem with Communication Server");
         System.exit(1); 
        } 
    }
} 

Client :

import java.io.*;

import java.net.*;

import java.lang.*;

import java.io.Console;

    public class EchoClient2 {
    public static void main(String[] args) throws IOException {

        String serverHostname = new String ("127.0.0.1");

        if (args.length > 0)
           serverHostname = args[0];
        System.out.println ("Attemping to connect to host " +
                serverHostname + " on port .");

        Socket echoSocket = null;
        PrintWriter out = null;
        BufferedReader in = null;
        BufferedReader in1 = null;

        try {
            echoSocket = new Socket(serverHostname, 2010);
            out = new PrintWriter(echoSocket.getOutputStream(), true);
            in = new BufferedReader(new InputStreamReader(
                                        echoSocket.getInputStream()));
        } catch (UnknownHostException e) {
            System.err.println("Don't know about host: " + serverHostname);
            System.exit(1);
        } catch (IOException e) {
            System.err.println("Couldn't get I/O for "
                               + "the connection to: " + serverHostname);
            System.exit(1);
        }

    BufferedReader stdIn = new BufferedReader(
                                   new InputStreamReader(System.in));
        BufferedReader std = new BufferedReader(
                                   new InputStreamReader(System.in));
    String upwd,uname,text;
        Console console = System.console();
        String username = console.readLine("Username:");
        char[] pwd = console.readPassword("Password:");
        upwd=new String(pwd);

 while (username!=null && upwd!=null && (uname = stdIn.readLine()) != null)
           {

            out.println("Username:"+username);


        out.println("Password:"+upwd);

            // end loop
            if (uname.equals("Bye."))
                break;


       }

    out.close();

    stdIn.close();
    echoSocket.close();
    }
}
4

1 回答 1

0

在客户端,将密码写入流后执行out.flush() 。

于 2012-08-23T10:43:37.557 回答