2012-02-27 12 views
0

私の問題を今では説明するのは難しいですが、私はいくつかの支援を受けるために最善を尽くします。serversocket server + client issues

技術的には私はスーパークラスとしてserver.javaとclient.javaを持っています。この

MAIN SERVER --- CLIENT/SERVER ----- CLIENT 

私の主な問題は、このクライアント/サーバーの一部が一緒にクライアントとサーバである2つの異なるクラスを呼び出す1つのドライバクラスです...そして、このさのように、私のサーバーとクライアントの接続のための私のレイアウト構造を行きますCLIENTがMAIN SERVER側で受信する必要があるものを、CLIENT/SERVER部を経由して送るときに問題が発生します。この状態が発生するのであれば...

CLIENTデータを受け入れるSERVERであるため、CLIENTはCLIENT/SERVER(SERVER)と対話する必要があります。しかし今、私はCLIENT/SERVERの(SERVER)部分がCLIENT/SERVER部分のデータを(CLIENT)に転送して、MAIN SERVERに送ることができるようにしたいと考えています。

私はどのように書くことができますかCLIENT/SERVERが相互にやり取りして、その間にデータをやり取りできるようにするものですか?これは、上記一緒に

public class Slave { 
public static void main(String args []) throws IOException{ 
    try{ 
    // set Config file settings to slave mode 
    Config cfg = new Config("Slave"); 
    String MasterServerIP = cfg.getProperty("ServerIP"); 
    String MasterServerPort = cfg.getProperty("ServerPort"); 
    String SlaveServerPort = cfg.getProperty("ListeningPort"); 

    System.out.println("Slave Client connecting to Master Server"); 

    // start connect to master server by calling the SlaveClient class 
    new SlaveClient(MasterServerIP,Integer.parseInt(MasterServerPort)).start(); 

    int numClient = 0; 
    ServerSocket listener = new ServerSocket(Integer.parseInt(SlaveServerPort)); 
    System.out.println("Server starts running"); 

    try{ 
     while(true){ 
      // start listening to the server port by calling SlaveServer class 
      new SlaveServer(listener.accept(), numClient++, Integer.parseInt(SlaveServerPort)).start(); 
     } 
    } finally { 
     listener.close(); 
    } 

    } catch (FileNotFoundException file) { 
     System.out.println("File Not Found Error: "+file.getMessage()); 
    } 
} 

クライアントとサーバを呼び出すための私のコード}

で、サーバーとクライアント側である2オブジェクトクラスを呼び出すだけで、ドライバクラスがどのように今までに。

私はここに私のslaveserverとslaveclientコードを添付しますが、あなたはあなたがプロキシを作成しようとしている

public class SlaveServer extends Server { 
private JFrame frame = new JFrame(); 
private JTextArea msgArea = new JTextArea(); 
private JTextArea connectionArea = new JTextArea(); 

// SlaveServer Constructor 
public SlaveServer(Socket socket, int numClient, int port) { 
    super(socket, numClient, port); 
} 
    public void writeToMsg(String msg){ 
    msgArea.append(msg+"\n"); 
} 

public void writeToConnection(String msg){ 
    connectionArea.append(msg+"\n"); 
} 


public void run(){ 
    try{ 
     startGUI(); 
     // initial BufferedReader and PrintWriter object by binding it with Socket 
     BufferedReader in = new BufferedReader(new InputStreamReader(getSocket().getInputStream())); 
     PrintWriter out = new PrintWriter(getSocket().getOutputStream(), true); 

     // welcome message send from server to client 
     out.println("Welcome to the Slave Server port:"+getPort()+" client #"+getNumClient()); 

     while(true){ 
      String readmsg = in.readLine(); 
      writeToMsg(readmsg); 
     } 

    } catch (IOException e){ 
     writeToMsg("Error in closing Socket"); 
    } 
    writeToConnection("Connection from client #"+getNumClient()+" is closed"); 
} 
} 






public class SlaveClient extends Client{ 
private BufferedReader in; 
private PrintWriter out; 
private JFrame frame = new JFrame(); 
private JTextArea msgArea = new JTextArea(); 
private JTextArea connectionArea = new JTextArea(); 

// SlaveClient Constructor 
public SlaveClient(String ip, int port) { 
    super(ip, port); 
} 
public void run(){ 
    startGUI(); 
    Socket sock = null; 
    try { 
     sock = new Socket(getIp(), getPort()); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    try { 
     in = new BufferedReader(new InputStreamReader(sock.getInputStream())); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    try { 
     out = new PrintWriter(sock.getOutputStream(), true); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

    out.println("TEST"); 

    // while loop for reading message from server 
    while(true){ 
     try { 
      getMsg(in); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
} 
} 

答えて

0

を言ったように私はそれを行う方法がわからないのですか?

プロキシの半分のサーバーにクライアントの半分の参照を渡す必要があります。これにより、データを転送できるようになります。

次に、サーバーの半分からのメッセージを受け入れるメソッドをクライアントの半分に作成します。

サーバーの半分で読み取ったメッセージはすべて、クライアントの半分に渡します。クライアントの半分はそれを実サーバに渡すことができます。

+0

私は上記のSlaveClientとSlaveServerコードで私の質問を編集し直しています... – user1217609

+0

私は見ることができないサーバーのスーパークラスのように見えるwriteToMsg()メソッドを見てみることをお勧めします。 SlaveClientを変更して、 "TEST"以外のものを送る必要があるかもしれません。 – DNA

+0

実際に私のwriteToMsgはn番目の関連する原因です。SlaveServerからのメソッドですが、上記のことは言及していませんでしたが、実際のコードは実際のコードです。私の投稿から再度編集します..私はJTextArea私のGUIのため....今私は、私はこの問題を考えて、それのための解決策を見つけるためにデータを送信するための方法を作成していない1st .. – user1217609