Hallo,
Ik ben nu al een tijdje bezig met een client / server maar zit toch met iets waar ik nog steeds niet uit kom.
Ik maak gebruik van DataSockets, overstappen op corba/rmi/objectsockets heeft geen zin meer ivm met tijd
.
Het zit zo:
De client heeft een thread die luisterd naar de socket. Hij ontvangt ook de data goed enzo.
Maar nu wil ik bijvoorbeeld dat er wat naar de server gestuurt word, en er een hele string terug gestuurt word en die wil ik opvangen gelijk in die methode die ook de opdracht verstuurde. Maar als ik dan de run() methode ff stop met de while lus false te maken dan loopt de gui ook vast en krijg niet altijd de data dan binnen.:(
Het gaat dan nu vooral om de getPlayers() methode.
Die stuurt "15" naar de server en die stuurt dan naar de client een lijst met ip adressen. Maar ik wil dus in die methode zelf die lijst ontvangen en niet in de run() methode. Hij roept eerst send(String) aan en daarna print hij read() op het scherm, maar dat werkt dus niet
Wat moet ik dan anders doen?
Al vast bedankt.
Ik ben nu al een tijdje bezig met een client / server maar zit toch met iets waar ik nog steeds niet uit kom.
Ik maak gebruik van DataSockets, overstappen op corba/rmi/objectsockets heeft geen zin meer ivm met tijd
Het zit zo:
De client heeft een thread die luisterd naar de socket. Hij ontvangt ook de data goed enzo.
Maar nu wil ik bijvoorbeeld dat er wat naar de server gestuurt word, en er een hele string terug gestuurt word en die wil ik opvangen gelijk in die methode die ook de opdracht verstuurde. Maar als ik dan de run() methode ff stop met de while lus false te maken dan loopt de gui ook vast en krijg niet altijd de data dan binnen.:(
Het gaat dan nu vooral om de getPlayers() methode.
Die stuurt "15" naar de server en die stuurt dan naar de client een lijst met ip adressen. Maar ik wil dus in die methode zelf die lijst ontvangen en niet in de run() methode. Hij roept eerst send(String) aan en daarna print hij read() op het scherm, maar dat werkt dus niet
Wat moet ik dan anders doen?
Al vast bedankt.
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
| import java.net.*; import java.io.*; import java.util.*; import java.lang.*; import javax.swing.*; public class Link extends Thread implements Runnable,ConstantsClient{ //private Client client; private DataInputStream in; private DataOutputStream out; private Socket socket; private JFrame frame; private boolean running = true; //private listener list; private String rmsg; public Link(JFrame frame){ //this.client = client; try { try{ this.frame = frame; this.socket = new Socket("127.0.0.1",10); in = new DataInputStream(new BufferedInputStream(this.socket.getInputStream())); out = new DataOutputStream(new BufferedOutputStream(this.socket.getOutputStream())); }catch(UnknownHostException e){} }catch(IOException e){} } public void send(String msg){ try{ out.writeUTF(msg); out.flush(); }catch(IOException e){} System.out.println("out: "+msg); } public Set getPlayers(){ Set b = new HashSet(); running = false; send("15"); System.out.println("READER: "+read()); return b; } public String read(){ running = false; String m = null; try{ //try{ //wait(100); m = in.readUTF(); if ( m != null) { System.out.println("READ:"+m ); } }catch(IOException e){} running = true; return m; } public void run(){ while (running) { try{ System.out.println("listening started"); String m = in.readUTF(); if ( m != null) { rmsg = m; System.out.println("Net in:"+m ); if (m.indexOf("83") == 0){ Object[] options = {"OK"}; int n = JOptionPane.showOptionDialog(frame, "battleship met " + m.substring(2), "Verzoek tot spelen", JOptionPane.OK_OPTION, JOptionPane.WARNING_MESSAGE, null, options, options[0]); } if (m.indexOf("66")==0){ System.out.println("raak"); } } }catch(IOException e){} } } } |
[ Voor 15% gewijzigd door eppie op 09-06-2003 15:03 ]