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多线程和并发。