/ Forside / Teknologi / Udvikling / Java / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Java
#NavnPoint
molokyle 3688
Klaudi 855
strarup 740
Forvirret 660
gøgeungen 500
Teil 373
Stouenberg 360
vnc 360
pmbruun 341
10  mccracken 320
J2ME: Event ved modtagning af data på sock~
Fra : Kasper Johansen


Dato : 30-01-06 15:49

Hej gruppe.


Jeg vil gerne have et "event" ved modtagning af data på en socket.
Hvordan gøres dette lettest?

Koden til min socket kan ses her:

try{
   SocketConnection client = (SocketConnection)
Connector.open("socket://ip:port");
   in = client.openInputStream();
   out = client.openOutputStream();
}


--
Med venlig hilsen
Kasper Johansen

 
 
Kasper Johansen (30-01-2006)
Kommentar
Fra : Kasper Johansen


Dato : 30-01-06 15:59

Kasper Johansen skrev:
> Jeg vil gerne have et "event" ved modtagning af data på en socket.
> Hvordan gøres dette lettest?
>
> Koden til min socket kan ses her:
>
> try{
> SocketConnection client = (SocketConnection)
> Connector.open("socket://ip:port");
> in = client.openInputStream();
> out = client.openOutputStream();
> }

Hvis det er nogen, der har svaret, vil jeg også gerne have det til
almindelig Java (altså ikke til J2ME platform).

Jeg syntes ikke at kunne finde noget på Google, så hvis en derude har et
link, vil jeg også være taknemmelig for det.


--
Med venlig hilsen
Kasper Johansen

Mads (30-01-2006)
Kommentar
Fra : Mads


Dato : 30-01-06 16:48

Kasper Johansen wrote:
> Kasper Johansen skrev:
>> Jeg vil gerne have et "event" ved modtagning af data på en socket.
>> Hvordan gøres dette lettest?
>>
>> Koden til min socket kan ses her:
>>
>> try{
>> SocketConnection client = (SocketConnection)
>> Connector.open("socket://ip:port");
>> in = client.openInputStream();
>> out = client.openOutputStream();
>> }
>
> Hvis det er nogen, der har svaret, vil jeg også gerne have det til
> almindelig Java (altså ikke til J2ME platform).
>
I normal Java vil read metoderne på din inputstream blocke indtil der er
input data.
Hvis du gerne vil lave noget observer pattern, kan du jo starte en tråd
(brug evt. thread pooling) som du lader kalde read på din inputstream.
Hver gang read returnere andet end End of stream/Exceptions kalder du
notify på dine observers.

Venlig hilsen
Mads


Kasper Johansen (31-01-2006)
Kommentar
Fra : Kasper Johansen


Dato : 31-01-06 13:16

Mads skrev:
> I normal Java vil read metoderne på din inputstream blocke indtil der er
> input data.
> Hvis du gerne vil lave noget observer pattern, kan du jo starte en tråd
> (brug evt. thread pooling) som du lader kalde read på din inputstream.
> Hver gang read returnere andet end End of stream/Exceptions kalder du
> notify på dine observers.

Jeg har nu fået lavet en ny tråd, der konstant lytter efter data. Når
der kommer data over socket, kan den fint skrive det ud.

Spørgsmålet er nu: Hvordan får jeg, ved modtagning af en linje på min
socket, kørt en metode på min oprindelige classe?

Jeg ville blive rigtig glad for et lille eksempel, hvis du kunne se dig
tid til det :)


Min kode ser nogenlunde sådan her ud (jeg har sorteret det irellevante fra):


//Startkode til Thread:
in = new BufferedReader(new
InputStreamReader(clientsocket.getInputStream()));

Thread t1 = new Thread(new ClientThread_listen(in));

t1.start();


//Ny thread der lytter:
class ClientThread_listen implements Runnable{
   BufferedReader in;
   String inputline;
   
   public ClientThread_listen(BufferedReader tha_in){
      in = tha_in;
   }
   
   public void run(){
      System.err.println("Ny ClienThread_listen-objekt-tråd er startet.");
      
      while(true){
         try{
            while((inputline = in.readLine()) != null){
               System.err.println("Ny besked: " + inputline);
            }
            
            Thread.sleep(2000);
         }catch(Exception tha_exc){}
      }
   }
}


--
Med venlig hilsen
Kasper Johansen

Janus (31-01-2006)
Kommentar
Fra : Janus


Dato : 31-01-06 15:26

Kasper Johansen wrote:

>
> Spørgsmålet er nu: Hvordan får jeg, ved modtagning af en linje på min
> socket, kørt en metode på min oprindelige classe?
>
>

public class ClientThread implements ActionListener {

....
Thread t1 = new Thread(new ClientThread_listen(in), this);
t1.start();
....
public void ActionPerformed(ActionEvent event) {
String received = (String)event.getSource();
// gør noget med din String her ...
}
}

class ClientThread_listen implements Runnable{

public ClientThread_listen(BufferedReader tha_in, ActionListener
aListener) {
in = tha_in;
....

while(true) {
try {
while((inputline = in.readLine()) != null) {
aListener.actionPerformed(new ActionEvent(inputLine,
ActionEvent.ACTION_PERFORMED, "ClientThread_listen > text received"));
}
}
}
....


Mvh Janus

Kasper Johansen (31-01-2006)
Kommentar
Fra : Kasper Johansen


Dato : 31-01-06 22:21

Janus skrev:
> Thread t1 = new Thread(new ClientThread_listen(in), this);
> t1.start();

Det her var lige, hvad jeg ledte efter :)

Jeg takker og bukker mange gange :)

Kommer fra PHP, så jeg er ikke vandt til at arbejde med flere threads.
Kunne have sagt mig selv, at jeg skulle bruge "this" (nu har jeg jo også
arbejdet en del med JavaScript, selvom det ikke er det samme) :)


--
Med venlig hilsen
Kasper Johansen

Søg
Reklame
Statistik
Spørgsmål : 177579
Tips : 31968
Nyheder : 719565
Indlæg : 6409073
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste