【发布时间】:2020-08-27 04:28:32
【问题描述】:
我正在编写代码来获取从服务器到客户端的日期。但是当我运行时,结果是null。
我不明白为什么,从服务器到客户端的格式日也有问题。
我可以同步时钟,但我无法同步日期。
我需要帮助:我想从服务器同步客户端上的日期和时钟
服务器:
public class ServerDemo{
public static void main(String []args) throws IOException{
ServerSocket s = new ServerSocket(50555);
int server_timeout = 10000;
s.setSoTimeout(server_timeout);
displayBanner();
System.out.println("|\n|-Server is running...");
try{
while(true){
Socket s1 = s.accept();
System.out.println("|\n|-Connection Received : " + s1);
BufferedWriter dos = new BufferedWriter(new OutputStreamWriter(s1.getOutputStream()));
SimpleDateFormat outDate = new SimpleDateFormat("dd/MM/yyyy");
//DateFormat timeFormat = new SimpleDateFormat("HH:mm:ss");
Date dt = new Date();
System.out.println(" |\n |-Sent to client : " + dt);
dos.write(outDate.format(dt) + " ");
//dos.writeChars(timeFormat.format(dt) + '\n');
System.out.println(" |\n |-Connection Terminated : " + s1);
s1.close();
dos.close();
}
} catch(SocketTimeoutException e){
System.out.println("|\nTerminating server due to timeout...");
System.out.println("Server is terminated!");
s.close();
}
}
System.out.println("[+]--Clock Synchronization Server v1.0.1--- initializing...");
}
客户:
public class ClientDemo{
public static void main(String []args) throws Exception{
Socket s = new Socket("192.168.1.190", 50555);
BufferedReader InFromServer = new BufferedReader(new InputStreamReader(s.getInputStream()));
BufferedWriter OutToServer = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
String date = InFromServer.readLine();
System.out.println(date);
/*
DateFormat Format = new SimpleDateFormat("dd/MM/yyyy");
//parse the data from the server
Date serverDate = Format.parse(date);
//format the server for the Runtime commands
DateFormat newFormatDate = new SimpleDateFormat("dd-MM-yy");
String sysdate = "" + newFormatDate.format(serverDate);
System.out.println(sysdate);
*/
InFromServer.close();
s.close();
}
【问题讨论】:
-
你正在读一行,但你没有写一行。在
write()之后使用BufferedWriter.newLine()和flush()。dos建议DataOutputStream,而不是BufferedWriter:在变量命名时要清楚。 -
我看不懂。 dos.write(outDate.format(dt) + "");这样对吗?我正在向客户发送日期。客户会得到它。我认为是
-
我建议你不要使用
SimpleDateFormat和Date。这些类设计不佳且早已过时,尤其是前者,尤其是出了名的麻烦。而是使用来自java.time, the modern Java date and time API 的LocalDate和DateTimeFormatter。 -
你无法理解
dos.write()是不对的,当你被告知要使用其他三个电话时?您究竟需要什么才能理解这一点?请解释一下。 -
不要破坏你自己的问题。如果您不希望您的代码出现在此处,请删除 wiole 问题。没有它,这里就没有任何价值。
标签: java date time synchronization client-server