【问题标题】:NTP for TCP/IP(server-client)TCP/IP 的 NTP(服务器-客户端)
【发布时间】:2013-05-10 18:39:24
【问题描述】:

我有一个简单的服务器...

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);
    ....

-如何将更多客户端连接到此服务器? (我还需要2个) - 我也想将系统时间从服务器发送到客户端,然后客户端将发送 每次返回他们的时间 10 次加上一些固定的延迟(0.5-1 秒)然后服务器必须从所有延迟中找到平均值并将其作为新时间发送回客户端......

感谢您的宝贵时间...

【问题讨论】:

  • server.accept 在循环中,并在单独的线程中处理返回的套接字。您可以考虑使用 ExecutorService。

标签: java client-server ntp


【解决方案1】:

System.currentTimeMillis()提供系统时间

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

一个简单的服务器是:

ServerSocket serverSock = new ServerSocket(2000);

while (true)
{
    Socket fpSock = serverSock.accept();
    MyThread t = new MyThread(fpSock, this);
    t.start();
}

您需要的处理将在 MyThread run() 方法中完成。 “this”被传递给线程以提供一个引用,每个线程都可以回调主类中的方法。确保使此类方法synchronized

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

【讨论】:

  • Big thx... m8... 我仍然很难让我不太习惯线程和套接字...我现在正在学习它们...但我会给试试看.. :)
  • 还有一个问题....嗯....如果我有 2 个或更多无限循环,我如何将它们穿线以便它们可以一起运行?
  • 你可以有2个无限循环没有问题。但是,您可能只想运行某些方法的一个实例,并且必须将它们标记为“已同步”。阅读有关 Java 多线程和并发的更多信息。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-30
  • 2010-11-29
  • 2012-08-31
  • 1970-01-01
  • 2011-11-16
  • 1970-01-01
相关资源
最近更新 更多