klient socket dzieli wysyłane treści. dlaczego?

0

Witam, napisałem prosty server socket, który nasłuchuje na kompie A. Jest też client socket, który działa na kompie B. Problem polega na tym, że wysyłana linia jest dzielona przez server. Np. wysyłam taką treść "/send xxxx aaa ccc\n" a serwer odbiera to w ten sposób: linia1-"/", linia2-"send xxxx", linia3-"ccc". Gdy łącze się z serverem np klientem putty polecenie przechodzi w całości, czyli tak jak to powinno być. Z dodatkowych ciekawostek gdy całość działa lokalnie nie ma problemów.
Proszę o jakąś wskazówkę. Pozdrawiam.

0

Skoro gdy łączysz się przez Putty i polecenie przechodzi w całości, to wysyłania linia nie jest dzielona przez serwer, tylko przez klient.
Wklej kod wysyłania w kliencie.

0

klient niestety jest napisany w javie (serwer w c#)

public class ClientSocket {

   public static String[] clientSocket(String mc){

        Socket clientSocket = null;
        String [] conf = ConfigRS.configRS();
        String host = conf[2];
        int port = Integer.parseInt(conf[22]);
        String [] resc = new String[10];

        try {
            clientSocket = new Socket(host, port);
        } catch (UnknownHostException e) {
            System.out.println("Nieznany host.");
            //System.exit(-1);
        } catch (ConnectException e) {
            System.out.println("Połączenie odrzucone.");
            //System.exit(-1);
        } catch (IOException e) {
            System.out.println("Błąd wejścia-wyjścia: " + e);
            //System.exit(-1);
        }

        System.out.println("Połączono z " + clientSocket);
        String line = null;
        String line2 = null;
        BufferedReader brSocket = null;
        DataOutputStream out = null;

        if(clientSocket==null){
            resc[0]="Brak połączenia";
        } else {

        try {
            out = new DataOutputStream(clientSocket.getOutputStream());
            brSocket = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
        } catch (IOException e) {
            System.out.println("Błąd przy tworzeniu strumieni: " + e);
            System.exit(-1);
        }

        try {
            line = mc;
            out.writeBytes(line+'\n');
            out.flush();
        } catch (IOException e) {
            System.out.println("Błąd wejścia-wyjścia: " + e);
            System.exit(-1);
        }

        new Logi(host +":"+ port +" "+ line);

        int i = 0;
            //while (true) {
            try {
                line2 = brSocket.readLine();
                    //if(!line2.equals("")){
                        resc[1]=line2;
                        //System.out.println("resc: "+line2);
                        //new Logi(line2);
                        //i++;
                    //}
            //}

		System.out.println(brSocket.readLine());

            //out.flush();
            //out.close();
            //brSocket.close();
            
        } catch (IOException e) {
            System.out.println("Błąd wejścia-wyjścia: " + e);
            System.exit(-1);
        } catch (Exception e) {
            //System.out.println("B��d og�lny: " + e);
        }
       //}
        }

        return resc;

    }
}
 
0

Specyfika socketów ma to do siebie, że nigdy nie masz gwarancji(i nie możesz na tym polegać), że wszystkie dane zostaną wysłane jednym wywołaniem send i wszystkie zostaną odebrane jednym wywołaniem read. Musisz napisać i klienta i serwer uwzględniając to.

0

ok, dzięki

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