Dag mensen,
ik heb een klein probleem bij het maken van een MultiClient Serverprogramma.
Het programma dat ik maak listent dmv een ServerSocket op een bepaalde port en voor welke connectie die binnenkomt, wordt er een CommunicatieThread aangemaakt.
In die CommunicatieThread wordt weer een Protocol klasse aangeroepen. Dit is allemaal gedaan zoals op java.sun.com beschreven staat in het voorbeeld van het KnockKnockProtocol. Dit Protocol behandelt datgene wat binnenkomt en datgene wat er weer uit moet...
Naar aanleiding van wat er binnenkomt, moet er weer een opdracht gestart worden, ook dit zal in de vorm van een CommandThread zijn.
Nu moet het echter mogelijk zijn voor elk volgende client die inlogt informatie uit die CommandThread te halen.
Het zit dus zo, de eerste 3 dingen zijn al geprogrammeerd:
-> Main programma die op port listent
-> Voor elke nieuwe connectie wordt een CommunicatieThread geopend
-> In die CommunicatieThread wordt de afwisseling tussen de server en de client gedaan aan de hand van een protocol klasse...
-> De Protocol klasse moet echter een object (CommandThread) gaan aanmaken, waarvan de variabele in elk volgende CommunicatieThread weer aanspreekbaar is. Ook mag de CommandThread niet verloren gaan als de CommunicatieThread wordt geclosed.
De moeilijkheid zit het em voor mij in het laatste.... hoe maak ik die CommandThread in elke volgende CommunicatieThread weer aanspreekbaar...
In PHP heb je $GLOBALS waar je zoiets in kwijt kan... ik weet niet hoe dit bij Java in zijn werk gaat. In Java heb ik dmv dit board al iets gelezen over Singletons, maar volgens mij is dat toch niet de methode voor dit probleem...
Hier zijn de scripts die ik tot nu toe heb
Hopelijk kan iemand mij helpen!
Met vriendelijke groet,
Fred
ik heb een klein probleem bij het maken van een MultiClient Serverprogramma.
Het programma dat ik maak listent dmv een ServerSocket op een bepaalde port en voor welke connectie die binnenkomt, wordt er een CommunicatieThread aangemaakt.
In die CommunicatieThread wordt weer een Protocol klasse aangeroepen. Dit is allemaal gedaan zoals op java.sun.com beschreven staat in het voorbeeld van het KnockKnockProtocol. Dit Protocol behandelt datgene wat binnenkomt en datgene wat er weer uit moet...
Naar aanleiding van wat er binnenkomt, moet er weer een opdracht gestart worden, ook dit zal in de vorm van een CommandThread zijn.
Nu moet het echter mogelijk zijn voor elk volgende client die inlogt informatie uit die CommandThread te halen.
Het zit dus zo, de eerste 3 dingen zijn al geprogrammeerd:
-> Main programma die op port listent
-> Voor elke nieuwe connectie wordt een CommunicatieThread geopend
-> In die CommunicatieThread wordt de afwisseling tussen de server en de client gedaan aan de hand van een protocol klasse...
-> De Protocol klasse moet echter een object (CommandThread) gaan aanmaken, waarvan de variabele in elk volgende CommunicatieThread weer aanspreekbaar is. Ook mag de CommandThread niet verloren gaan als de CommunicatieThread wordt geclosed.
De moeilijkheid zit het em voor mij in het laatste.... hoe maak ik die CommandThread in elke volgende CommunicatieThread weer aanspreekbaar...
In PHP heb je $GLOBALS waar je zoiets in kwijt kan... ik weet niet hoe dit bij Java in zijn werk gaat. In Java heb ik dmv dit board al iets gelezen over Singletons, maar volgens mij is dat toch niet de methode voor dit probleem...
Hier zijn de scripts die ik tot nu toe heb
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
| import java.io.IOException;
public class FTCServer {
ServerSocket serverSocket = null;
Socket clientSocket = null;
public static void main(String args[]) {
System.out.println("Opening server socket");
try {
serverSocket = new ServerSocket(65155);
} catch (IOException e) {
System.err.println("Could not listen on port: 65155.");
System.exit(-1);
}
System.out.println("Listening..");
while (true) {
clientSocket = serverSocket.accept();
new FTCThread (clientSocket);
}
serverSocket.close();
}
} |
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
| import java.net.*;
import java.io.*;
public class FTCThread extends Thread {
private Socket socket = null;
public FTCThread(Socket socket) {
this.socket = socket;
}
public void run() {
try {
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
BufferedReader in = new BufferedReader(
new InputStreamReader(
socket.getInputStream()));
FTPTransferCommanderProtocol ftcp = new FTPTransferCommanderProtocol();
String inputLine, outputLine;
while ((inputLine = in.readLine()) != null) {
outputLine = ftcp.processInput(inputLine);
out.println(outputLine);
if (outputLine.equals("BYE")) {
break;
}
}
out.close();
in.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
} |
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
| import com.sharper.ftp.*;
public class FTPTransferCommanderProtocol {
// protocol variabele
private static final int WAITING = 0;
private static final int READY = 1;
private static final int NEW_TRANSFER = 2;
private static final int ABORT_TRANSFER = 2;
private static final int GET_STATUS = 2;
private int status;
private int transferID;
// FTP variabele
String port = null;
FTPClient ftpTo;
FTPClient ftpFrom;
FTPReply reply;
boolean login;
public FTPTransferCommanderProtocol () {
status = WAITING;
}
public String processInput(String input) {
String output;
if (status==WAITING) {
if (input.equals("READY\r\n")) {
// moet nog, ip controle
status = READY;
output = input;
return output;
} else {
output="ERROR\r\n";
return output;
}
} else if (status==READY) {
if (input.equals("NEW TRANSFER")) {
status = NEW_TRANSFER;
output = input;
return output;
} else if (input.equals("ABORT TRANSFER")) {
status = ABORT_TRANSFER;
output = input;
return output;
} else if (input.equals("GET STATUS")) {
status = GET_STATUS;
output = input;
return output;
} else {
output="ERROR\r\n";
return output;
}
} else if (status==NEW_TRANSFER) {
if (input.substring(0,3).equals("ID=")) {
String transferSID = input.substring(3);
transferID.getInteger(transferSID);
if (transfer[transferID]) {
output="ID ERROR; ID ALREADY EXISTS";
} else {
output="ID RECEIVED; ID=" . transferSID;
}
} else if (input.substring(0,9).equals("TRANSFER=")) {
}
}
}
} |
Hopelijk kan iemand mij helpen!
Met vriendelijke groet,
Fred