2012-08-23 74 views
1

我正在製作基於控制檯的java應用程序 - 它將檢查客戶端的用戶名和密碼。我想要的是客戶輸入的數據必須按行格式輸入到服務器,即按Enter鍵必須發送用戶名數據和密碼才能進入下一個輸入按。但問題是什麼 - 直到我退出客戶端,數據才被髮送到服務器。意思是,當客戶點擊'再見'。然後關閉客戶端,然後服務器接收數據。在這方面幫助我,因爲這是第一步 - 後來我必須在服務器上用這個用戶名和密碼來檢查數據庫。我的代碼如下:使用java套接字的基於控制檯的登錄應用程序

服務器:

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

客戶:

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

您是否正在創建2個'Reader'來從同一個'InputStream'獲取數據?我想知道這將如何工作。 – SJuan76

+0

而且你不寫入任何東西到客戶端套接字輸出(朝向服務器),從不。 – SJuan76

+0

爲什麼你需要兩次來自客戶端的用戶名和uname?字符串用戶名= console.readLine(「用戶名:」);和(uname = stdIn.readLine()); – Dan

回答

0

在客戶端,做了out.flush()寫入密碼到流之後。

相關問題