|
| 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
| |
|
|