我想创建一个服务器,该服务器应该接受2个输入时间(每个项目),并在达到项目的截止日期时显示。使用日历设置2个项目的截止日期并验证日期?
这里的程序应该做的:
- 询问截止时间为第1项
- 设定的期限为1项
- 询问截止时间为2项
- 设置项目2的截止日期
- 运行服务器,检查未达到截止日期。如果到达,则在控制台中显示相应的消息,以说明已达到哪个截止日期(哪个项目)。
我很努力的能够用我的代码实现这一点。
这就是我现在所拥有的:
import java.io.*;
import java.net.*;
import java.util.*;
public class MultiEchoServer
{
public static void main(String[] args) throws IOException
{
Calendar start = Calendar.getInstance();
int date = start.get(Calendar.DATE);
int month = start.get(Calendar.MONTH);
int year = start.get(Calendar.YEAR);
Scanner input = new Scanner(System.in);
ServerSocket serverSocket = null;
final int PORT = 1234;
Socket client;
ClientHandler handler;
try
{
serverSocket = new ServerSocket(PORT);
}
catch (IOException ioEx)
{
System.out.println("\nUnable to set up port!");
System.exit(1);
}
System.out.println("\nServer running...\n");
System.out.print("Enter finishing time for item 1 in 24-hr format "); // Item 1
System.out.print("(e.g. 17:52) : ");
String timeString = input.nextLine();
String hourString = timeString.substring(0,2);
int hour = Integer.parseInt(hourString);
//Extract minutes from user's entry...
String minString = timeString.substring(3,5);
int minute = Integer.parseInt(minString);
//Set up Calendar object to hold deadline time...
Calendar deadline = Calendar.getInstance();
//Put current date (retrieved from 'start' Calendar object) and time (entered by user) into above
//Calendar object...
deadline.set(year,month,date,hour,minute,0);
//(Last argument above specifies seconds.)
System.out.println("\n\nDeadline: " + getDateTime(deadline) + "\n");
System.out.print("Enter finishing time for item 2 in 24-hr format "); // Item 2
System.out.print("(e.g. 17:52) : ");
String timeString2 = input.nextLine();
String hourString2 = timeString2.substring(0,2);
int hour2 = Integer.parseInt(hourString2);
//Extract minutes from user's entry...
String minString2 = timeString2.substring(3,5);
int minute2 = Integer.parseInt(minString2);
//Set up Calendar object to hold deadline time...
Calendar deadline2 = Calendar.getInstance();
//Put current date (retrieved from 'start' Calendar object) and time (entered by user) into above
//Calendar object...
deadline2.set(year,month,date,hour2,minute2,0);
//(Last argument above specifies seconds.)
System.out.println("\n\nDeadline: " + getDateTime(deadline2) + "\n");
//Retrieve current date and time...
Calendar now = Calendar.getInstance();
while(now.before(deadline) || now.before(deadline2))
{
//System.out.println(getDateTime(now));
//Pause to prevent dates and times from
//scrolling off screen too quickly...
try
{
Thread.sleep(2000);
}
catch (InterruptedException intEx)
{
//Do nothing.
}
//Update current date and time...
now = Calendar.getInstance();
}
System.out.println("\n\nDeadline reached!!!\n");
do
{
//Wait for client.
client = serverSocket.accept();
System.out.println("\nNew client accepted.\n");
handler = new ClientHandler(client);
handler.start();
}while (true);
}
public static String getDateTime(Calendar dateTime)
{
//Extract hours and minutes, each with 2 digits
//(i.e., with leading zeroes if needed)...
String hour2Digits = String.format("%02d", dateTime.get(Calendar.HOUR_OF_DAY));
String min2Digits = String.format("%02d", dateTime.get(Calendar.MINUTE));
return(dateTime.get(Calendar.DATE)
+ "/" + (dateTime.get(Calendar.MONTH)+1)
+ "/" + dateTime.get(Calendar.YEAR)
+ " "+ hour2Digits + ":" + min2Digits);
}
}
class ClientHandler extends Thread
{
private Socket client;
private Scanner input;
private PrintWriter output;
public ClientHandler(Socket socket) throws IOException
{
client = socket;
input = new Scanner(client.getInputStream());
output = new PrintWriter(client.getOutputStream(),true);
}
public void run()
{
String received;
received = input.nextLine();
while (!received.equals("QUIT"))
{
output.println("ECHO: " + received);
received = input.nextLine();
}
try
{
System.out.println("Closing down connection...");
client.close();
}
catch(IOException ioEx)
{
System.out.println("* Disconnection problem! *");
}
}
}
有没有设定截止日期为每个项目并检查是否最后期限已达到更有效的方法是什么?为Item
创建班级会是一个好主意吗?我将如何实现这一点?