Avatar billede mummikiks Nybegynder
16. december 2005 - 21:21 Der er 2 kommentarer og
1 løsning

Problemer med SerielEvent og thread

Hej Experter

Jeg har lavet følgende kode:

/*
* CommunicationThread.java
* Created on 1. December 2005, 09:18
* Version 0.01
*
* Tested using TestCommunication.java on 10/12-05
* Done by commenting out:
*
* @author: 05gr551
* @contact: 05gr551@control.aau.dk
*
* Target device:
* Windows XP SP2
*/
package Network;

import java.io.*;
import javax.comm.*;
import Core.Domain;

public class ReceiveThread implements SerialPortEventListener, Runnable{

    static BufferedReader reader;

    public ReceiveThread() {
        Thread receive = new Thread(this);
        receive.start();
    }

    synchronized public void serialEvent(SerialPortEvent event) {
        try {
            char[] charInteger = new char[2];
            reader = new BufferedReader(new InputStreamReader(Domain.communication.inputStream));
            if (reader.ready()){
                charInteger[0] = (char) reader.read();
                charInteger[1] = (char) reader.read();
                char commandId = (char)reader.read();
                char numBytes = (char) reader.read();
                int senderId = 0;
                senderId += (int)((((byte)charInteger[0]) << 8) &  0xFF00);
                senderId += (int)(((byte)charInteger[1])& 0xFF);
                byte[] data = new byte[numBytes];
                for(int i=0; i<numBytes; i++){
                    data[i]=(byte) reader.read();
                }   
                  Domain.ingoingMessageHandler.addMessage(new Message(senderId, commandId, data));
                  }
           
               
            }
            catch (IOException e) {
                System.out.println(e);
            }
    }

    public void run() {

    }
}

Når der kommer en event ind på comporten registreres det og behandles. Det virker også fint nok og jeg får læst min data og sendt videre. Problemet ligger bare i at når jeg sender en pakke til den
00 00 F1 02 01 01
Beskeden bliver fint behandlet og jeg kan fint sende flere af dem fra et eksternt termnialprogram. Problemet ligger i at hvis jeg sender:
00 00 F1 02 01 01 00 00 F1 02 01 01
Altså sender to beskeder over samlet, så registrere den kun den ene besked. Jeg har været ved at implementere noget thread, men ved heller ikke om det er der problemet ligger. Den opfatter bare det som et samlet event og starter derfor ikke forfra med a tlæse når den første del af beskeden er læst.
Avatar billede stephanryer Nybegynder
17. december 2005 - 14:09 #1
Hvis du selv har kontrol over det du sender så kan du evt bruge en seperator som fx //
du sender så
00 00 F1 02 01 01 // 00 00 F1 02 01 01 // 00 00 F1 02 01 01
Når du modtager bruger du bare en java.util.Scanner sådan her:
Scanner scanner = new Scanner(inputStreng)
scanner.useDelimiter("//");
while(scanner.hasNext()){
  String pakke = scanner.next();
  //Behandl pakken her
}
Avatar billede mummikiks Nybegynder
19. december 2005 - 15:35 #2
Det har jeg desværre ikke mulighed for...Kan man ikke gøre det således at den kan køre flere tråde på engang, altså hver gang serielevent erregistreret
Avatar billede mummikiks Nybegynder
23. december 2005 - 00:01 #3
Hmm lukker
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester