Java TCP/IP的NTP(服务器客户端)

Java TCP/IP的NTP(服务器客户端),java,client-server,ntp,Java,Client Server,Ntp,我有一个简单的服务器 public static void main(String[] args) throws Exception{ ServerSocket server = new ServerSocket(2000); Socket sock = server.accept(); InputStream in = sock.getInputStream(); OutputStream out = sock.getOutputStream(); P

我有一个简单的服务器

public static void main(String[] args) throws Exception{
    ServerSocket server = new ServerSocket(2000);
    Socket sock = server.accept();
    InputStream  in = sock.getInputStream();
    OutputStream out = sock.getOutputStream();
    PrintWriter w = new PrintWriter(out);
    Scanner s = new Scanner(in);
    ...
还有一个简单的客户端

public static void main(String[] args) throws Exception{
    Socket sock = new Socket("localhost",2000);;
    InputStream in= sock.getInputStream();
    OutputStream out = sock.getOutputStream();
    PrintWriter w  = new PrintWriter(out);
    Scanner s = new Scanner(in);
    ....
-如何将更多客户端连接到此服务器?(我还需要两个) -我还想将系统时间从服务器发送到客户端,然后客户端将发送 每个延迟10次,再加上一些固定的延迟(0.5-1秒),然后服务器必须找到所有延迟的平均值,并将其作为新时间发送回客户端


感谢您抽出时间…

系统。currentTimeMillis()
提供系统时间

server.accept()
返回的每个套接字都是一个单独的对象,您的服务器可以通过每个套接字对象与每个客户端独立通信。但是,由于您的应用程序是时间敏感的,我建议为每个客户端使用单独的线程

简单的服务器是:

ServerSocket serverSock = new ServerSocket(2000);

while (true)
{
    Socket fpSock = serverSock.accept();
    MyThread t = new MyThread(fpSock, this);
    t.start();
}
您需要的处理将在MyThread run()方法中完成。“this”被传递给线程,以提供一个引用,其中每个线程都可以回调到主类中的方法。确保这些方法
同步


您也不一定需要将服务器的时间发送给客户机,只需发送一个通用数据包,客户机将回显该数据包。对所有事务使用服务器的时间戳,以避免客户端系统时间的变化。

server.accept在循环中,并在单独的线程中处理返回的套接字。您可能会考虑使用ExcutoService…Big-THX…m8。。。这对我来说仍然很难,因为我不太习惯线程和套接字…我现在正在学习它们。。。但我会试试看……)还有一个问题。。。。嗯。。。。如果我有两个或更多的无限循环,我如何将它们线程化,使它们可以一起运行?你可以有两个无限循环,没有问题。但是,您可能只希望运行某些方法的一个实例,并且必须将它们标记为“已同步”。更多信息,请阅读Java多线程和并发。