Java-使用eclipse运行多个客户端

Java-使用eclipse运行多个客户端,java,eclipse,client-server,Java,Eclipse,Client Server,我用Java编写了服务器和客户端的代码。但问题是,当服务器运行时,如何使用Eclipse在不同的控制台窗口上运行多个客户端?谢谢你的帮助! (解决了!!) 更新** 另一个问题:我将创建一个新问题 服务器: import java.net.*; import java.io.*; public class ATMServer { private static int connectionPort = 8989; public static void main(String[]

我用Java编写了服务器和客户端的代码。但问题是,当服务器运行时,如何使用Eclipse在不同的控制台窗口上运行多个客户端?谢谢你的帮助! (解决了!!)

更新** 另一个问题:我将创建一个新问题

服务器:

import java.net.*;
import java.io.*;

public class ATMServer {

    private static int connectionPort = 8989;
    public static void main(String[] args) throws IOException {
    ServerSocket serverSocket = null;
    boolean listening = true; 
    try {
        serverSocket = new ServerSocket(connectionPort); 
    } catch (IOException e) {
        System.err.println("Could not listen on port: " + connectionPort);
        System.exit(1);
    }

    System.out.println("Bank started listening on port: " + connectionPort);
    while (listening)
        new ATMServerThread(serverSocket.accept()).start();
    serverSocket.close();
}
}

服务器线程:

import java.io.*;
import java.net.*;

public class ATMServerThread extends Thread {
private Socket socket = null;
private BufferedReader in;
PrintWriter out;
public ATMServerThread(Socket socket) {
    super("ATMServerThread");
    this.socket = socket;
}

public void run(){

}
}
}
客户:(**更新)


您可以从Eclipse中运行尽可能多的套接字客户端,只要您在Eclipse中为该程序的“运行配置”对话框中的“程序参数”选项卡下的main()中传递用户定义的ip/端口信息作为命令参数,而不是为ip/端口使用一些硬接线值

要创建多个控制台视图(通过单独的控制台视图选项卡而不是单击每个实例),您需要在Eclipse调试视图模式下为每个目标实例创建一个新的控制台视图;要实现这一点,您需要选择“New Console View”(从控制台视图最右侧带有加号的图标按钮)并指定要从每个新控制台查看的程序实例

另一个问题:如果我必须更改ServerThread上的某些内容,例如,添加一个标题,是否可以在不重新启动服务器的情况下执行该操作


哪个标题?我没有看到ServerThread代码段的任何GUI代码。您是指Console view选项卡的标题名吗?

您可以从Eclipse运行尽可能多的套接字客户端,只要您在Eclipse内部的运行配置对话框中,将用户定义的ip/端口信息作为命令参数从Program arguments选项卡下的main()传递给该程序,而不是使用一些硬接线的ip/端口值

要创建多个控制台视图(通过单独的控制台视图选项卡而不是单击每个实例),您需要在Eclipse调试视图模式下为每个目标实例创建一个新的控制台视图;要实现这一点,您需要选择“New Console View”(从控制台视图最右侧带有加号的图标按钮)并指定要从每个新控制台查看的程序实例

另一个问题:如果我必须更改ServerThread上的某些内容,例如,添加一个标题,是否可以在不重新启动服务器的情况下执行该操作


哪个标题?我没有看到ServerThread代码段的任何GUI代码。您是指Console view选项卡的标题名称吗?

您尝试过什么?您将为即将启动的所有Java应用程序提供许多控制台……beny23是正确的。Eclipse应该自动为您做到这一点。要查看不同的控制台,请单击您拥有的选项卡上的控制台按钮。您应该看到所有打开的控制台。当我试图打开另一个控制台来运行客户端时,它并没有像我希望的那样单独运行。当我在第一个客户机控制台中写东西时,第一个和第二个都得到了输出。如何避免这种情况?@Ferry在eclipse中按两次Run按钮。@Ferry可能没有,但您的服务器的代码丢失了。您确定您的应用程序不会因为eclispe自动(默认)切换到生成输出的控制台而感到困惑吗?您尝试了什么?您将为即将启动的所有Java应用程序提供许多控制台……beny23是正确的。Eclipse应该自动为您做到这一点。要查看不同的控制台,请单击您拥有的选项卡上的控制台按钮。您应该看到所有打开的控制台。当我试图打开另一个控制台来运行客户端时,它并没有像我希望的那样单独运行。当我在第一个客户机控制台中写东西时,第一个和第二个都得到了输出。如何避免这种情况?@Ferry在eclipse中按两次Run按钮。@Ferry可能没有,但您的服务器的代码丢失了。您确定您的应用程序不会因为eclispe自动(默认)切换到生成输出的控制台而感到困惑吗?
import java.io.*;   
import java.net.*;  
import java.util.Scanner;

public class ATMClient {
private static int connectionPort = 8989;

public static void main(String[] args) throws IOException {

    Socket ATMSocket = null;
    PrintWriter out = null;
    BufferedReader in = null;
    String adress = "";

    try {
        adress = "127.0.0.1";
    } catch (ArrayIndexOutOfBoundsException e) {
        System.err.println("Missing argument ip-adress");
        System.exit(1);
    }
    try {
        ATMSocket = new Socket(adress, connectionPort); 
        out = new PrintWriter(ATMSocket.getOutputStream(), true);
        in = new BufferedReader(new InputStreamReader
                                (ATMSocket.getInputStream()));
    } catch (UnknownHostException e) {
        System.err.println("Unknown host: " +adress);
        System.exit(1);
    } catch (IOException e) {
        System.err.println("Couldn't open connection to " + adress);
        System.exit(1);
    }




    out.close();
    in.close();
    ATMSocket.close();
}