byteweises lesen bei einer Socketverbindung

master79

Grünschnabel
Hallo Zusammen,

ich habe Zwei Klassen die miteinander für ein Socket kommunizieren.
Die Eine Klasse schickt ständig Nachrichten über ein Socket an die andere Klasse.
Die Empfängerklasse soll ALLES entgegennehmen was gesendet wird. Dumemrweise funktinoiert dies nicht. Die Empfängerklasse bekommt nicht alle Bytes zu lesen. Woran kann das liegen?

Sender:
...
Code:
char message = new char[] {0x69, 0xC2, 0xCC, 0x0D, 0x43, 0x31, 0x09, 0x77, 0x62, 0x46, 0xDC, 0x17, 0xA1, 0x19, 0xC8, 0x39, 0x52, 0xC2, 0xC9, 0x1B, 0x43, 0x2C, 0x01, 0x87, 0x4E, 0x03, 0x45, 0x54, 0x52, 0x87, 0x51, 0x0C, 0x44, 0x45, 0x36, 0x30, 0x36, 0x34, 0x33, 0x37, 0x33, 0x33, 0x37, 0x30, 0x40, 0x10, 0x44, 0xC2, 0xD2, 0x2A, 0x58, 0x18, 0x16, 0x18, 0x08, 0x00, 0x60, 0x26, 0xFC, 0x00, 0x06, 0x48, 0x34, 0x60, 0x27, 0xFC, 0x00, 0x06, 0x41, 0x2C, 0x65, 0x40, 0xFD, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x91, 0xE8, 0x65, 0x41, 0xFD, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x91, 0xE8, 0xC2, 0xD1, 0x07, 0x87, 0x42, 0x04, 0x35, 0x31, 0x35, 0x32};

byte messageToSend[] = new byte[message.length];
for (int i = 0; i < message.length; i++) {
   messageToSend[i] = (byte)message[i];
}

        int len = message.length;

        Socket soc = new Socket("localhost", "8080");
        System.out.println("Beginne mit dem Senden der Nachrichten");

            try
            {
                OutputStream out = soc.getOutputStream();
                    for (int i = 0; i < 10; i++)
                {
                    out.write(messageToSend);
                    out.flush();
                }
            }
            catch (IOException e)
            {
            }
Empfänger:
Code:
 ServerSocket soc = new ServerSocket(8080);
 Socket inputsoc = soc.accept();

 InputStream is = inputsoc.getInputStream();

  while((zahl = is.read()) != -1) {
  System.out.println(durchlauf + " " + (int) (zahl & 0xFF));
}

Wie kommt es das hier beim Empfänger nicht alle Bytes ankommen

Bin für eure Hilfe sehr dankbar
 
Hallo,

es kommen nicht alles Bytes des veschickten Byte-Arrays beim Empfänger an.
bzw. der Empfänger schafft es nicht alle Bytes zu lesen.

Wenn ich die Anwendung mehrmals durchlaufen lasse werden mal mehr, mal weniger Bytes ausgelesen vom Empfänger. Noch gravierender wird es wenn ich dem Empfänger zwischen jedem read() ein sleep einbaue. Dann wird noch weniger vom Stream gelesen.

Ich vermute mittlerweile das alle Bytes ankommen, nur das es der Empfänger nicht schafft alles rechtzeitig zu lesen und die Bytes irgendwie verfallen.

Mfg
master79
 
Hallo,

das Problem hat sich geklärt. Es lag nicht an der Empfängerseite.
Der Sender ist schuld.
Sobald dieser mit dem Senden fertig ist, hab ich hin dummerweise beendet. Dadurch wurde auch die Socket-Verbindung gekappt. Dies bedeutet wiederum das der Empfänger nicht aus dem Stream, welcher auf dem Socket aufsetzt, lesen kann.

Gruß
master79
 
Zurück