Java serversocket服务器+;客户问题
好吧,现在我很难描述我的问题,但是我会尽我最大的努力来帮助我 从技术上讲,我有一个server.java和client.java作为一个超类。我的服务器和客户端连接的布局结构如下Java serversocket服务器+;客户问题,java,serversocket,Java,Serversocket,好吧,现在我很难描述我的问题,但是我会尽我最大的努力来帮助我 从技术上讲,我有一个server.java和client.java作为一个超类。我的服务器和客户端连接的布局结构如下 MAIN 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对象类(即服务器端和客户端)的驱动程序类
我将在这里附加我的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();
}
}
}
}
那么您正在尝试编写代理 您需要为代理的服务器端提供对客户端端的引用,以便它可以转发数据 然后在客户机部分创建一个方法来接受来自服务器部分的消息
因此,您在服务器端读取的每一条消息都会传递给客户端端。客户端可以将它传递给真正的服务器。我建议您看看writeToMsg()方法,它看起来像是在服务器超类中,我们看不到。您可能需要修改SlaveClient以发送其他“测试”内容.实际上我的writeToMsg与第n个相关,因为它们只是来自SlaveServer的方法,我在上面没有提到,但这里是我在上面的帖子中编辑的实际代码..它们只是我用来为GUI附加我的JTextArea的方法..现在我还没有创建任何发送数据的方法,因为我想到了这个问题1.似乎很难找到解决办法