serversocket server + клиентские проблемы - PullRequest
0 голосов
/ 28 февраля 2012

Хорошо, сейчас мне сложно описать мою проблему, но затем я постараюсь сделать все возможное, чтобы получить некоторую помощь.

технически у меня есть server.java и client.java как суперучебный класс.и моя структура макета для соединения с сервером и клиентом выглядит следующим образом

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

Моя главная проблема заключается в том, что эта часть CLIENT / SERVER представляет собой 1 класс драйвера, который вызывает 2 разных класса, которые являются CLIENT и SERVER вместе ...и это создает проблему, когда мой КЛИЕНТ отправляет что-то, что должно быть получено ОСНОВНОЙ СЕРВЕРНОЙ стороной, должно пройти часть КЛИЕНТА / СЕРВЕРА.если это условие происходит ..

КЛИЕНТ, конечно, должен взаимодействовать с частью КЛИЕНТ / СЕРВЕР (SERVER), потому что это СЕРВЕР, который принимает данные КЛИЕНТА.но теперь я хотел, чтобы часть (SERVER) в CLIENT / SERVER передавала данные в (CLIENT) в части CLIENT / SERVER, чтобы их можно было отправить в MAIN 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();
        }
    }
}
}

1 Ответ

0 голосов
/ 28 февраля 2012

То есть вы пытаетесь написать прокси?

Вам нужно дать серверной половине прокси ссылку на клиентскую половину, чтобы она могла пересылать данные.

Затем создайте метод в клиентской половине для приема сообщений от серверной половины.

Таким образом, каждое сообщение, которое вы читаете на серверной половине, передается клиентской половине.Клиентская половина может затем передать его на реальный сервер.

...