Auf Thema antworten

@Murray

wenn read am Anfang 0 ist und es nur zwei Durchläufe gibt, dann sollte es bisher doch auch klappen, schlimmstenfalls das Array weiter vorne falsch befüllt werden,

wie es wohl zu einer Exception kommen kann?

evtl. mit einem größeren Array ausprobieren, ruhig auch mal 500.000,


den Fehler mit dem 1111, 2222 kann ich mir auch nicht erklären, alles mysteriös,


eine weitere Baustelle wäre nun testen:

sende

out.print("String ;" + "String ;" + "String ;" + "String" + "\n" +  "x" + "\n");

wird "x" vor 2222 gelesen (gelesenen String auch ausgeben)?


danach "x" im Client nach und nach durch kompliziertere Strings ersetzen, per Schleife auch 30000 "x" zusammenfassen

und alles mögliche, wenn das geht aber der andere String nicht, dann diesen genauer untersuchen,

z.B. nur den ersten char davon senden, kommt an? dann 2, 3 usw.,

kommt irgendwann ein Fehler?

wenn erst nach 24525, dann kann man wieder an einen Übertragungsfehler denken, bei kleineren Werten doch irgendwie vom Inhalt abhängig?

aber ich rate nur, kann ich mir eigentlich nicht vorstellen


wobei ich das auch nicht schreiben sollte ohne selber zu testen, ergo:

[code=Java]

public class Test  {

    public static void main(String[] args)   throws Exception  {

        new Thread(new Server()).start(); // Server starten


        // Rest ist Client

        Thread.sleep(1000);

        Socket skt = new Socket("localhost", 3456);

        PrintWriter out = new PrintWriter(skt.getOutputStream(), true);

        BufferedReader in = new BufferedReader(new InputStreamReader(skt.getInputStream()));

        out = new PrintWriter(new OutputStreamWriter(skt.getOutputStream()));

        StringBuilder st = new StringBuilder();

        for (int i = 0; i < 30203; i++)  {

            st.append((char)(i + 100)); // +100, damit Zeilenumbruch nicht mit dabei

        }


        out.print("String; " + "String; " + "3; " + "30203\n" + st.toString() + "\n");

        out.flush();

    }

}



class Server  implements Runnable {

    public void run()  {

        try  {

            serve();

        }  catch (Exception e)   {

            e.printStackTrace();

        }

    }


    public void serve()   throws Exception  {

        ServerSocket socket = new ServerSocket(3456);

        Socket skt = socket.accept();

        BufferedReader in = new BufferedReader(new InputStreamReader(skt.getInputStream()));

        PrintWriter out = new PrintWriter(new OutputStreamWriter(skt.getOutputStream()));


        String split[] = Pattern.compile("; ").split(in.readLine());

        String modelType = split[0];

        String model = split[1];

        int paramNumber = Integer.parseInt(split[2]);

        String[] param = new String[paramNumber];

        for (int i = 0; i < paramNumber; i++) {

            param[i] = split[i];

        }


        int bufferSize = Integer.parseInt(split[3]);

        System.out.println("b: " + bufferSize);

        System.out.println("1111");

        String inputLine = in.readLine();

        System.out.println("2222 - " + inputLine.length());

    }

}

[/code]

Ausgabe:

[code]

b: 30203

1111

2222 - 30203

[/code]

funktioniert



Oben