programowanie sieciowe w Javie

0

hej :)
mam za zadanie zrobić aplikację sieciową typu klient-serwer. Zrobiłem ja w C (gniazda BSD). Teraz przyszła kolej, by napisać jeszcze jednego klienta - w Javie. Niestety znam podstawy (składnię) Javy i mam problem. Otóż tu mamy część kodu serwera (już po nawiązaniu połączenia) w C:

		while (fgets(bufor, sizeof(bufor), odczyt)) {
			bufor[strlen(bufor)-1] = '\0';
			printf("%s", bufor);
			fputs("czesc\n", zapis);
			}

Jak widać, nieskończona pętla, która wyswietla żadanie klienta i wysyła do niego "czesc\n" (znak nowej linii jest konieczny, inaczej klient nie otrzymuje nic - nie wiem dlaczego). Teraz jakbym chciał wysłać np "czesc\nuser\njak tam?\n", zaczynają się problemy, które myślę że są po stronie klienta, oto jego cały kod:

import java.io.*;
import java.net.*;

public class Klient {

	public static void main(String args[]) throws IOException {
		String zadanie;
		String odpowiedz;

		InetAddress adres = InetAddress.getByName(args[0]);
		int port = Integer.parseInt(args[1]);

		BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in));
	
		Socket clientSocket = new Socket(adres, port);

		DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream());
		BufferedReader inFromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
		

		while(true) {
			System.out.print("\t => ");
			zadanie = inFromUser.readLine();
			if (zadanie.charAt(0) == 'q') { break; } // wyjscie z petli gdy pierwsza litera żądania = q
			outToServer.writeBytes(zadanie + '\n');
			odpowiedz = inFromServer.readLine();	
			System.out.println(odpowiedz);

		}
		clientSocket.close();
	}

}

myślę, że bład jest w linii gdzie klient czeka na opdowiedz serwera:
odpowiedz = inFromServer.readLine();
na strumieniu wykonywana jest metoda readLine(), która czyta wiersz, na co ją zmienić, o ile o to chodzi??

pozdr :)

0

Hmm, dobrze byłoby, gdybyś wklepał też kod serwera. Bez wnikania za mocno, spróbowałbym dać :

outToServer.flush();

zaraz po wysłaniu danych.

Nie za bardzo też rozumiem, czemu nie użyjesz strumienia znakowego w celu wysłania na serwer (np. PrintWriter), skoro operujesz na ciągach znaków.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.