2016-05-03 10 views
1

私はJavaで基本的なサーバとクライアントプログラムを作った。クライアントよりもサーバを起動すると、ユーザがパスワード "root"を入力してその値をパスワードとして保存した場合、サーバー側で接続が開始されたときに「パスワードはパスワードの値」よりも大きくなるようにしようとしていますが、プログラムを実行するたびに「パスワードはヌルです」というメッセージが表示されます。 ?私は静的に文字列を変更し、それはまだ私にnullを与えた、助けて説明してください?サーバ - クライアントJava

サーバー側のコード

import java.io.IOException; 
import java.net.ServerSocket; 
import java.net.Socket; 


public void lookForConnection(){ 
    Socket connection; 
    clientMethod cM = new clientMethod(); 
    { 
     try 
     { 
      System.out.print("Program running..."); 
      ServerSocket serverSocket = new ServerSocket(6789); 
      while(true) 
      { 
       connection = serverSocket.accept(); 
       System.out.println("Connected Succesfully!"); 
       System.out.println(connection.getInetAddress().getHostName()); 
       System.out.println("The password for this connection is " + cM.password);    
      } 
     } 
     catch(IOException ex) 
     { 
      System.out.println (ex.toString()); 

     } 

    } 
} 

クライアント側のコードおそらく

import java.io.EOFException; 
import java.util.Scanner; 
import java.io.IOException; 
import java.net.InetAddress; 
import java.net.ServerSocket; 
import java.net.Socket; 

public class clientMethod { 
    public String serverIP; 
    public String password; 
    public Socket connection; 
    public void Client(String host) 
    { 
     serverIP = host; 
    } 
    public void startRunning() { 
     try{ 
      Scanner console = new Scanner(System.in); 
      System.out.print("Please provide the admin password: "); 
      password = console.next(); 
      if(password.compareTo("root") == 0) { 
       connectToServer();   
      //} 
      } 
     } 
     catch(EOFException eofException){ 
      System.out.print("\n Client terminated the connection"); 
     } 
     catch(IOException ioException) { 
      ioException.printStackTrace(); 
     } 
    } 
    private void connectToServer() throws IOException { 
     System.out.println("Attempting connection..."); 
     connection = new Socket(InetAddress.getByName(serverIP), 6789); 
     System.out.println("Connected to " + connection.getInetAddress().getHostName()); 

    } 
} 

答えて

1

あなたのサーバーにパスワードを送信することはありませんので、あなただけのローカル変数cMの変数passwordの値を印刷すること設定されていないので、確かにnullです。サーバーにデータを送信する方法を参照するには

チェックthis tutorialが、基本的な考え方は、あなたがSocket#getOutputStream()から取得OutputStreamを使用してクライアントからデータを書き込むことで、それがサーバーに、あなたがそれを読んで、サーバーからデータを送信しますSocket#getInputStream()

+0

私のクライアント側では、ユーザーの入力値に設定された可変パスワードではありませんか?それは価値がないでしょうか? –

+0

いいえあなたはそれをシリアル化する必要はありません魔法はありません、私が提供するチュートリアルをお読みください、あなたはより理解します –

関連する問題