Мне сложно описать мою проблему сейчас, но тогда я постараюсь изо всех сил, чтобы я мог помочь.serverocket server + проблемы с клиентами
технически у меня есть server.java и client.java как суперкласс. и моя структура макета для моего сервера и клиента связи идет как этот
MAIN SERVER --- CLIENT/SERVER ----- CLIENT
моя основная проблема заключается в этом КЛИЕНТА/СЕРВЕРА часть 1 класс драйвера, который вызывает 2 разных классов, является клиент и сервер вместе ... и это создает проблему, когда мой КЛИЕНТ отправляет то, что должно быть получено стороной MAIN SERVER, нужно пройти через часть CLIENT/SERVER. если это условие происходит.
КЛИЕНТ обязательно должен взаимодействовать с частью CLIENT/SERVER (SERVER), потому что является SERVER, который принимает данные CLIENT. но теперь я хотел, чтобы часть (СЕРВЕР) в КЛИЕНТЕ/СЕРВЕР передала данные в (КЛИЕНТ) в части КЛИЕНТ/СЕРВЕР, чтобы ее можно отправить в ГЛАВНЫЙ СЕРВЕР
как это возможно для меня написать что позволяет КЛИЕНТУ/СЕРВЕР взаимодействовать друг с другом, чтобы он мог передавать данные между ними наоборот? как всегда это мой код для вызова клиента и сервера вместе
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();
}
}
}
}
Я изменил свой вопрос с помощью кода SlaveClient и SlaveServer выше ... – user1217609
Я предлагаю вам взглянуть на метод writeToMsg(), который выглядит так, как будто он находится в суперклассе Server, который мы не видим. Вероятно, вам нужно изменить SlaveClient, чтобы отправить что-то другое, что «TEST». – DNA
на самом деле мой writeToMsg является n-й причиной, потому что это просто методы из SlaveServer, о которых я не упоминал выше, но вот вот фактический код, который я редактирую из своего сообщения выше. Это просто метод, который я использую для добавления JTextArea для моего графического интерфейса ... прямо сейчас я еще не создал какой-либо метод отправки данных, так как я думал об этой проблеме и нашел решение для нее. – user1217609