2013-05-10 105 views
0

我有一个简单的服务器...NTP为TCP/IP(服务器端)

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更多) - 我也想发送系统时间从服务器到客户端,然后客户端将发送 回到他们的时间每个加上一些固定的延迟(0.5-1秒),然后服务器必须找到所有平均延迟和发送回客户端作为新的时间...

感谢您的时间...

+0

server.accept在一个循环中,并将套接字返回给一个单独的线程。您可以考虑使用ExecutorService。 – Fildor 2013-05-10 10:25:31

回答

0

System.currentTimeMillis()提供系统时间

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

一个简单的服务器将是:

ServerSocket serverSock = new ServerSocket(2000); 

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

您所需要的处理将在MyThread的run()方法来实现。 “this”被传递给线程以提供一个引用,其中每个线程都可以回调主类中的方法。确保制作这样的方法​​。

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

+0

Big thx ... m8 ... 对于我来说,仍然很难让我不习惯线程和套接字...我现在正在学习它们......但是我会试试它..: ) – 2013-05-10 10:57:05

+0

还有一个问题.... 嗯....如果我有2个或更多的无限循环我怎么能把它们串起来让它们可以一起运行? – 2013-05-10 11:04:26

+0

你可以有2个无限循环没有问题。但是,您可能只想运行某些方法的一个实例,并且必须将它们标记为“已同步”。阅读Java多线程和并发性以获取更多信息。 – nitegazer2003 2013-05-22 09:27:56