Dit is een van mijn eerste projectjes in Java, en ik probeer een multithreaded socketserver te maken.
Ik loop enkel tegen wat probleempjes,
1: Wanneer een client de verbinding verbreekt, stop ik de while-lus, en haal ik de verbinding uit de connectionTable, echter blijft mijn thread nu nog levendig? En hoe zet ik die op stop?
2: Wanneer een client de verbinding verbreekt krijg ik een 'null', hij zegt "I Got: null" en de lijn eronder "Client dropped", normaal gezien wordt de while lus toch verbroken voordat hij aan I got geraakt.
3: Als ik iets stuur en druk op enter zegt hij "i got: ..." Dit is dus ok, maar wanneer ik de tweede maal wat stuur zegt hij niet, de derde maal zegt hij weer "i got:..." dus op de oneven verzonden berichten reageerd hij... Hoe komt dit?
Alvast bedankt voor de hulp!
Ik loop enkel tegen wat probleempjes,
1: Wanneer een client de verbinding verbreekt, stop ik de while-lus, en haal ik de verbinding uit de connectionTable, echter blijft mijn thread nu nog levendig? En hoe zet ik die op stop?
2: Wanneer een client de verbinding verbreekt krijg ik een 'null', hij zegt "I Got: null" en de lijn eronder "Client dropped", normaal gezien wordt de while lus toch verbroken voordat hij aan I got geraakt.
3: Als ik iets stuur en druk op enter zegt hij "i got: ..." Dit is dus ok, maar wanneer ik de tweede maal wat stuur zegt hij niet, de derde maal zegt hij weer "i got:..." dus op de oneven verzonden berichten reageerd hij... Hoe komt dit?
Alvast bedankt voor de hulp!
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
| import java.net.*; import java.io.*; import java.util.*; public class SocketServer { //Server Variables static Vector connectionTable; static int nextConnectionID = 1; public SocketServer(int port) { ServerSocket socketServer = null; Socket socket = null; connectionTable = new Vector(); try { socketServer = new ServerSocket(port); while ((socket = socketServer.accept()) != null) { ClientThread now; Thread current = new Thread(now = new ClientThread(socket)); current.setDaemon(true); connectionTable.addElement(now); current.start(); } } catch (Exception e) { System.err.println(e); System.exit(1); } } } class ClientThread extends Thread { //Thread Variables private Socket linkTo; //The Socket private int connectionID; private String line; public ClientThread(Socket from) { connectionID = SocketServer.nextConnectionID++; linkTo = from; System.out.println(linkTo); System.out.println(connectionID); ClientIn(); } public void ClientIn() { while(true) { try { // Get input from the client DataInputStream in = new DataInputStream (linkTo.getInputStream()); if(in.readLine() == null){ System.out.println("Client dropped!"); linkTo.close(); SocketServer.connectionTable.removeElement(this); break; //Client stoppen } else { System.out.println("I got:" + in.readLine()); } } catch (IOException ioe) { System.out.println("IOException on socket listen: " + ioe); ioe.printStackTrace(); } } } } |