簡體   English   中英

服務器套接字服務器+客戶端問題

[英]serversocket server + client issues

好的,現在很難描述我的問題,但是我會盡力幫助我。

從技術上講,我有一個server.java和client.java作為超類。 服務器和客戶端連接的布局結構如下

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

我的主要問題是此CLIENT / SERVER部分是1個驅動程序類,它同時調用2個不同的類,即CLIENT和SERVER ...,這在我的CLIENT發送需要由MAIN SERVER端接收的東西時產生了問題通過客戶端/服務器部分。 如果發生這種情況。

CLIENT當然需要與CLIENT / SERVER(SERVER)進行交互,因為它是一個接受CLIENT數據的SERVER。 但是現在我希望CLIENT / SERVER中的(SERVER)部分將數據傳輸到CLIENT / SERVER部分中的(CLIENT),以便可以將其發送到MAIN SERVER

我怎么可能編寫允許CLIENT / 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對象類(即SERVER和CLIENT端)的驅動程序類。

我將在此處附加我的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();
        }
    }
}
}

因此,您正在嘗試編寫代理?

您需要為代理服務器的一半提供對客戶端的引用,以便它可以轉發數據。

然后在客戶端一半中創建一個方法來接受來自服務器一半的消息。

因此,您在服務器端讀取的每條消息都會傳遞給客戶端。 然后,客戶端一半可以將其傳遞給真實服務器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM