一个程序中的Java Server和Client

时间:2017-05-14 11:43:18

标签: java server client

我希望将2个集合彼此同步。如果服务器端发生了某些变化,则连接的客户端会更新。 我有一个非常基本的问题。我现在需要复制我的java项目并将服务器编程为一个而客户端编程为另一个吗?但这听起来像很多不必要的工作。我不能在一个项目中实现它,然后在一个主服务器中启动服务器和客户端吗?我需要线程吗?我有点卡在这里最好的方式。 提前谢谢。

1 个答案:

答案 0 :(得分:0)

因为codereview不允许我的代码导致它还没有工作,所以我现在发布它,希望你可以帮助我。

public class Server implements Runnable{
private String hostName = "127.0.0.1";
private int portNumber;
private ServerSocket serverSocket;
private Socket clientSocket;

public Server(int port){
    this.portNumber = port;
}

public void run(){
    String line = "";
    PrintWriter out = null;
    BufferedReader in = null;
    BufferedReader stdIn = null;

    try{
        this.serverSocket = new ServerSocket(this.portNumber); 
    }catch (IOException e) {
        System.out.println("Could not listen on port");
    }

    try{
        clientSocket = serverSocket.accept();
    } catch (IOException e) {
        System.out.println("Accept failed");
    }

    try{
        in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
        out = new PrintWriter(clientSocket.getOutputStream(), true);
    }catch (IOException e) {
        System.out.println("Read failed");
    }

    while(true){

        try{
            line = in.readLine();

        }catch (IOException e) {
            System.out.println("Read failed");
        }

        System.out.println("line: "+line);
    }


}

protected void finalize(){
//Objects created in run method are finalized when
//program terminates and thread exits
    try{
        serverSocket.close();
    }catch (IOException e) {
        System.out.println("Could not close socket");
    }
 }

}

public class Client implements Runnable{
private String hostName = "127.0.0.1";
private int portNumber = 6602;
private Socket clientSocket = null;

public Client(Socket client){
    this.clientSocket = client;
}

public Client(int portNumber, String hostName){
    this.portNumber = portNumber;
    this.hostName = hostName;
}

public void run(){
    String line;
    PrintWriter out = null;
    BufferedReader in = null;
    BufferedReader stdIn = null;

    try{
        if(clientSocket == null)
            this.clientSocket = new Socket(this.hostName, this.portNumber);
        out = new PrintWriter(clientSocket.getOutputStream(), true);
        in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
        stdIn = new BufferedReader(new InputStreamReader(System.in));
        out.println("Test string from client");
    }catch (IOException e){
        System.out.println("in or out failed");
    }   

}

}

public class DebugServerClient {

public static void testServerClient(){
    int port = 6602;
    Server srv = new Server(port);
    Client clt = new Client(port, "127.0.0.1");

    Thread s = new Thread(srv);
    s.start();

    Thread c = new Thread(clt);
    c.start();


}

}

我现在改变它,它似乎工作。这是一个好方法吗?