Klient/Serwer przesylanie i porównanie dówch dat

0

Witam,
jestem początkujący więc proszę o wyrozumienie :)

Staram się napisać program klient/serwer dzięki,któremu użytkownik może porównać dwie daty,które wpisuje ( różnica w dniach ). Program działa i klient przesyła dane do serwera i porównuje je ale tylko wtedy gdy jedną z dat jest data czasu pobieranego w danej chwili poprzez

Date date2 = new Date();, w przypadku gdy próbuje porównać dwie wpisane daty to pojawia się błąd Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: -1
at java.lang.String.<init>(String.java:208)at TCP_klient.main(TCP_klient.java:57)Java Result: 1

w kliencie! (zmieniam przesłane dane od klienta na stringi potem na date i porównuje).Przesyłana jest tylko pierwsza data.

Dlaczego nie mogę w sytuacji przesłania dwóch dat stworzyć dwóch różnych zmiennych typu Date i ich porównać? Gdy pozbędę się drugiego wywołania Date obie zmienne są przesyłane...Z góry dzięki za pomoc

Klient:

import java.io.*;
import java.net.*;
import java.util.*;
import java.text.*;

public class TCP_klient
{

	/*String bufor_wy;

	public static void wyslij(bufor_wy)
	{
		wyjscie.write(bufor_wy,0,bufor_wy.length());
		wyjscie.flush();
		n = wejscie.read(dane,0,1000);
		String bufor_we = new String(dane,0,n);
		System.out.println("KLIENT> " + bufor_we);
	}*/

	public static void main(String[] args) throws IOException
	{
		InetAddress adresSerwera = InetAddress.getByName(args.length !=1 ? "localhost" : args[0]);
		Socket gniazdo = new Socket(adresSerwera, TCP_serwer.PORT);
		System.out.println("KLIENT> Polaczono z serwerem "+ gniazdo.getRemoteSocketAddress() + " z portu " + gniazdo.getLocalPort());
		
		Calendar cal1 = Calendar.getInstance();
		Calendar cal2 = Calendar.getInstance();

		try{
			BufferedReader klawiatura = new BufferedReader(new InputStreamReader(System.in));
			InputStreamReader wejscie = new InputStreamReader(gniazdo.getInputStream());
			OutputStreamWriter wyjscie = new OutputStreamWriter(gniazdo.getOutputStream());

			String bufor_wy;
			char[] dane = new char[1000];
			int n;

			System.out.println("KLIENT> System oblicza liczbe dni pomiędzy dwoma podanymi przez uzytkownika datami..");

			//pierwsza data
			System.out.println("KLIENT> Podaj pierwsza date: ");
			System.out.print("Podaj dzień: ");
			int d1 = Integer.parseInt(klawiatura.readLine());
			System.out.print("\nPodaj miesiac: ");
			int m1 = Integer.parseInt(klawiatura.readLine());
			System.out.print("\nPodaj rok: ");
			int r1 = Integer.parseInt(klawiatura.readLine());
			String data1 = r1 + "-" + m1 + "-" + d1;
			
			System.out.println("\nPierwsza data to: " + data1);

			if(data1.length() != 0)
			{
				wyjscie.write(data1,0,data1.length());
				wyjscie.flush();
				n = wejscie.read(dane,0,1000);
				String bufor_we = new String(dane,0,n);
				System.out.println("KLIENT> " + bufor_we);
			}


			//druga data
			System.out.println("KLIENT> Podaj druga date: ");
			System.out.print("Podaj dzień: ");
			int d2 = Integer.parseInt(klawiatura.readLine());
			System.out.print("\nPodaj miesiac: ");
			int m2 = Integer.parseInt(klawiatura.readLine());
			System.out.print("\nPodaj rok: ");
			int r2 = Integer.parseInt(klawiatura.readLine());
			String data2 = r2 + "-" + m2 + "-" + d2;

			System.out.println("\nDruga data to: " + data2);
		

			//bufor_wy = data2;
		
			//while(bufor_wy.length() != 0)
			if(data2.length() !=0)
			{
				wyjscie.write(data2,0,data2.length());
				wyjscie.flush();
				n = wejscie.read(dane,0,1000);
				String bufor_we = new String(dane,0,n);
				System.out.println("KLIENT> " + bufor_we);
			}

			//System.out.println("KLIENT> Koniec");
		
		} finally {
			gniazdo.close();
		}
	}
}

Serwer:

import java.io.*;
import java.net.*;
import java.util.*;
import java.text.*;

class ObslugaKlienta extends Thread
{
	private Socket gniazdo;
	private InputStreamReader wejscie;
	private OutputStreamWriter wyjscie;

	public ObslugaKlienta(Socket polaczenie) throws IOException
	{
		gniazdo = polaczenie;
		wejscie = new InputStreamReader(gniazdo.getInputStream());
		wyjscie = new OutputStreamWriter(gniazdo.getOutputStream());
		start();
	}

	public void run()
	{
		int n;
		long id = getId();
		char[] dane = new char[1000];
                String wiad1 = null;
                String wiad2 = null;   
                
		System.out.println("SERWER[" + id + "]> Polaczenie z klientem " + gniazdo.getRemoteSocketAddress());
		try
		{
			while(true)
			{
				n = wejscie.read(dane,0,1000);
				if(n != 0)
				{
					String komunikat = new String(dane,0,n);

                                           //wpis do tablicy
                                        if( wiad1 == null){
                                        wiad1 = komunikat;
                                        System.out.println("\nwiad1: "+wiad1);
                                        }
                                        else {
                                        wiad2 = komunikat;
                                        System.out.println("\nwiad2: "+wiad2);     
                                        }
                                        //koniec wpis do tablicy
                                        //tokenizer
                                        //koniec tokenizer
                                        DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
                                        //formatter.setLenient(false);
                                    
             				Date date1 = (Date)formatter.parse(wiad1); 
                                        
                                        //Date date2 = (Date)formatter.parse(wiad2);
                                        //date2 = (Date)formatter.parse(wiad2);
                                        //Calendar cal1 = Calendar.getInstance();
                                        //cal1.setTime(date1);
                                        //date1.clone();
                                       
                                        Date date2 = (Date)formatter.parse(wiad2);
					
                                        long datediff = ((date1.getTime()-date2.getTime())/(24*60*60*1000)); 
                                        

					
					System.out.println("\nSERWER[" + id + "]> " + datediff+" dni");
					wyjscie.write(dane,0,n);
					wyjscie.flush();
				}else throw new IOException();
			}
		}catch(Exception e){
		}finally{
			try{
				System.out.println("SERWER[" + id + "]> Rozlaczenie klienta " + gniazdo.getRemoteSocketAddress());
				gniazdo.close();
			}catch(IOException e){}
		}
	}
}



public class TCP_serwer
{
	public static final int PORT = 7000;
	public static void main (String[] args)throws IOException
	{
		ServerSocket nasluch = new ServerSocket(PORT);
		System.out.println("SERWER> Czekam na zgloszenia klientow..");

		try{
			while(true){
				Socket polaczenie = nasluch.accept();
				System.out.printf("SERWER> Zgloszenie klienta " + polaczenie.getRemoteSocketAddress());

				try{
					new ObslugaKlienta(polaczenie);
				}catch(IOException e){
					polaczenie.close();
				}
			}
		}finally{}	//opracowac zakonczenie
	}
}

Wiem,że być może piszę nie jasno o co mi chodzi i w czym jest problem więc proszę o pytania!

0

Problem rozwiązany. Do usunięcia.

0

witam, mam takie same pytanie jak autor na początku, czyli czego brakuje aby ten program działał?

Sorry że odgrzewam stary temat. Proszę o podpowiedź i dzięki z góry

0

Witam, mam taki problem. Chce aby dwie daty były pobierane z jednego komunikatu a różnica w dniach była wyświetlona w ten sposób:
środa
czwartek
piątek
itp
mój kod :

public class TestKal
		{

			

			public static void main(String[] args) throws IOException, ParseException
			{
				
				Calendar cal1 = Calendar.getInstance();
				Calendar cal2 = Calendar.getInstance();

				try{
					BufferedReader klawiatura = new BufferedReader(new InputStreamReader(System.in));
				

					String bufor_wy;
					char[] dane = new char[1000];
					int n;

				
					
					
					
					
				
					System.out.print("Wpisz dzień: ");
					int d1 = Integer.parseInt(klawiatura.readLine());
					System.out.print("Wpisz miesiac: ");
					int m1 = Integer.parseInt(klawiatura.readLine());
					System.out.print("Wpisz rok: ");
					int r1 = Integer.parseInt(klawiatura.readLine());
					String data1 = r1 + "-" + m1 + "-" + d1;
					
					System.out.println("\nPierwsza data to: " + data1);

					

					
					System.out.print("Podaj kolejny dzień: ");
					int d2 = Integer.parseInt(klawiatura.readLine());
					System.out.print("Podaj kolejny miesiac: ");
					int m2 = Integer.parseInt(klawiatura.readLine());
					System.out.print("Podaj kolejny rok: ");
					int r2 = Integer.parseInt(klawiatura.readLine());
					String data2 = r2 + "-" + m2 + "-" + d2;

					System.out.println("\nDruga data to: " + data2);
				

					bufor_wy = data2;
				
					
					
					
                 DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
                 formatter.setLenient(false);
             
		Date date1 = (Date)formatter.parse(data1); 
                 
                 Date date2 = (Date)formatter.parse(data2);
                 date2 = (Date)formatter.parse(data2);
                 Calendar cal11 = Calendar.getInstance();
                 cal1.setTime(date1);
                 date1.clone();
                
               

                 long dated = ((date1.getTime()-date2.getTime())/(24*60*60*1000)); 
                 
 

System.out.println( dated+" dni");
					
				
				
				} finally {
					;
				}
			}}
   
0

Pierwszy problem rozwiązany, teraz dalej nie wiem jak napisać metodę wyświetlającą daty np: w ten sposób
01.10.2000
02.10.2000
03.10.2000

Wpisuję np taką pętle i też jest źle

while (date1.getTime() <=date2.getTime()) {
System.out.println(date1.getTime() < date2.getTime());

}

Proszę o pomoc, dzięki z góry..

1 użytkowników online, w tym zalogowanych: 0, gości: 1