Ik ben op dit moment java aan het leren. Ik wil het volgende maken in de commandline:
Een client server systeem waarbij de gebruikers via de commandline inloggen op een server en vervolgens een reis kunnen boeken. Er moeten meerdere gebruikers kunnen inloggen. Het systeem moet dus multitreading gebruiken. De code is als volgt:
De server luistert op een socket, en de client stuurt zijn naam. De server start nu automatisch een thread. Maar nu (of die ik het helemaal verkeerd) moet deze thread kunnen communiceren met de client die deze thread gestart heeft. Moet ik nu in de thread een andere socket openen en opnieuw een connectie maken met de client? of kan ik op dezelfde socket communiceren door bij iedere communicatie de client naam waarmee hij inlogt mee te sturen zodat de rest dit kan negeren?
Een client server systeem waarbij de gebruikers via de commandline inloggen op een server en vervolgens een reis kunnen boeken. Er moeten meerdere gebruikers kunnen inloggen. Het systeem moet dus multitreading gebruiken. De code is als volgt:
code:
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
104
105
106
107
108
| import java.io.*;
import java.net.*;
public class bookServer implements Runnable
{
private static final int MAX_CONNECTIONS = 5;
private Thread[] clientConnections;
private static ServerSocket servSock;
private static final int PORT = 1234;
public static void main(String[] args)
{
bookServer serverTest = new bookServer();
}
public bookServer()
{
clientConnections = new Thread[MAX_CONNECTIONS];
System.out.println("Starting server....\n");
try
{
servSock = new ServerSocket(PORT);
}
catch(IOException e)
{
System.out.println("Unable to start server!");
System.exit(1);
}
do
{
try
{
serverStart();
}
catch(InvalidClientException icException)
{
System.out.println("Error: " + icException);
}
catch(InvalidRequestException irException)
{
System.out.println("Error: " + irException);
}
}while (true);
//clientConnections[0] = new Thread(this);
//clientConnections[0].start();
}
private void serverStart()
throws InvalidClientException, InvalidRequestException
{
try
{
Socket link = servSock.accept();
BufferedReader in =
new BufferedReader(
new InputStreamReader(
link.getInputStream()));
PrintWriter out = new PrintWriter(
link.getOutputStream(),true);
String name = in.readLine();
if(name != "")
{
System.out.println(name + " is trying to connect!");
clientConnections[0] = new Thread(this);
clientConnections[0].start();
}
//if (!name.equals(client1) && !name.equals(client2))
// throw new InvalidClientException();
//if (!sendRead.equals("send") && !sendRead.equals("read"))
// throw new InvalidRequestException();
link.close();
}
catch(IOException e)
{
e.printStackTrace();
}
}
public void run()
{
System.out.println(Thread.currentThread().getName() + " being executed.");
}
}
class InvalidClientException extends Exception
{
public InvalidClientException()
{
super("Invalid client name!");
}
public InvalidClientException(String message)
{
super(message);
}
}
class InvalidRequestException extends Exception
{
public InvalidRequestException()
{
super("Invalid request!");
}
public InvalidRequestException(String message)
{
super(message);
}
} |
De server luistert op een socket, en de client stuurt zijn naam. De server start nu automatisch een thread. Maar nu (of die ik het helemaal verkeerd) moet deze thread kunnen communiceren met de client die deze thread gestart heeft. Moet ik nu in de thread een andere socket openen en opnieuw een connectie maken met de client? of kan ik op dezelfde socket communiceren door bij iedere communicatie de client naam waarmee hij inlogt mee te sturen zodat de rest dit kan negeren?