Hallo allemaal,
ik zit al de hele dag te zoeken naar een oplossing voor het volgende probleem. Ik een een server en een client applicatie. De Client verstuurd een bestand naar de server. Hiervoor heb ik de volgende code:
De client verstuurd dus een commando + filesize naar de server: "SENDFILE_filesize". De server splitst dit commando, welke als string binnen komt, op in string strCommando en int fileSize. De fileSize wordt meegestuurd naar de volgende methode:
Bovenstaande methode is natuurlijk niet zo netjes (while(true)) en levert ook een foutmelding op. Namelijk, zodra de client klaar is met verzenden kapt hij er mee.
Nu zou het zo moeten zijn dat de Server na het afronden van bovenstaande methode getFile() een string "TRANSFERCOMPLETE" terug stuurt naar de client (staat in een andere methode). Om te zorgen dat deze methode uberhaupt kan eindigen had ik
veranderd in
maar op een of andere manier bereikt de file die op de server weg wordt geschreven nooit de filesize van de file op de server.
Is er een makkelijkere manier om dit te doen? Ik zat zelf te denken aan iets van een EoF, maar heb geen flauw idee hoe dit aan te pakken.
ik zit al de hele dag te zoeken naar een oplossing voor het volgende probleem. Ik een een server en een client applicatie. De Client verstuurd een bestand naar de server. Hiervoor heb ik de volgende code:
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
| public void fileSender(String fileName) { File file = new File(fileName); int intFileSize = (int) file.length(); System.out.println("FileSize: " + intFileSize); String strResponse = run("sendfile_" + intFileSize); System.out.println(strResponse); if (strResponse.equals("STARTSENDING")) { try { BufferedInputStream input = new BufferedInputStream(new DataInputStream(new FileInputStream( file))); BufferedOutputStream output = new BufferedOutputStream(new DataOutputStream(socSocket. getOutputStream())); byte b[] = new byte[512]; while (input.available() > 512) { input.read(b); output.write(b); output.flush(); } //strResponse = breReceiver.readLine(); //System.out.println("Response: " + strResponse); } catch (Exception e) { e.printStackTrace(); } } } |
De client verstuurd dus een commando + filesize naar de server: "SENDFILE_filesize". De server splitst dit commando, welke als string binnen komt, op in string strCommando en int fileSize. De fileSize wordt meegestuurd naar de volgende methode:
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| private void getFile(int intFileSize) { try { File file = new File("c:/temp/newFile/small.mp3"); BufferedInputStream in = new BufferedInputStream(socSocket.getInputStream()); BufferedInputStream input = new BufferedInputStream(new DataInputStream(in)); BufferedOutputStream output = new BufferedOutputStream(new DataOutputStream(new FileOutputStream( file))); //boolean blnTrue = true; while (true) { output.write(input.read()); } //System.out.println(file.length()); } catch (Exception e) { System.out.println("ERROR: " + e); } } |
Bovenstaande methode is natuurlijk niet zo netjes (while(true)) en levert ook een foutmelding op. Namelijk, zodra de client klaar is met verzenden kapt hij er mee.
Nu zou het zo moeten zijn dat de Server na het afronden van bovenstaande methode getFile() een string "TRANSFERCOMPLETE" terug stuurt naar de client (staat in een andere methode). Om te zorgen dat deze methode uberhaupt kan eindigen had ik
Java:
1
2
3
| while (true) { output.write(input.read()); } |
veranderd in
Java:
1
2
3
| while (file.length() < (long)(intFileSize -1000)) { output.write(input.read()); } |
maar op een of andere manier bereikt de file die op de server weg wordt geschreven nooit de filesize van de file op de server.
Is er een makkelijkere manier om dit te doen? Ik zat zelf te denken aan iets van een EoF, maar heb geen flauw idee hoe dit aan te pakken.
Liefde maakt een smal bed breed!
Nu de dekens nog...