ΠΡΠΎΠ΄ΡΠ»ΠΆΠ°Π²Π°ΠΉΠΊΠΈ ΠΏΡΠΎΠ΄ΡΠ»ΠΆΠ°Π²Π°ΡΠ°ΡΠ° ΠΏΠΎΡΠ΅Π΄ΠΈΡΠ° ΠΎΡ ΡΡΠ°ΡΠΈΠΈ, ΠΏΠΎΡΠ²Π΅ΡΠ΅Π½ΠΈ Π½Π° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΡΠΊΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π½Π° ΠΊΠΎΠ½Π·ΠΎΠ»Π½ΠΈ ΠΏΠΎΠΌΠΎΡΠ½ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈ Π½Π° Windows, Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π½Π΅ ΡΠ΅ Π΄ΠΎΠΊΠΎΡΠ½Π΅ΠΌ Π΄ΠΎ TFTP (Trivial File Transfer Protocol) - ΠΏΡΠΎΡΡ ΠΏΡΠΎΡΠΎΠΊΠΎΠ» Π·Π° ΠΏΡΠ΅Ρ Π²ΡΡΠ»ΡΠ½Π΅ Π½Π° ΡΠ°ΠΉΠ»ΠΎΠ²Π΅.
ΠΠ°ΠΊΡΠΎ ΠΌΠΈΠ½Π°Π»ΠΈΡ ΠΏΡΡ, Π½Π΅ΠΊΠ° ΠΏΡΠ΅Π³Π»Π΅Π΄Π°ΠΌΠ΅ Π½Π°ΠΊΡΠ°ΡΠΊΠΎ ΡΠ΅ΠΎΡΠΈΡΡΠ°, Π²ΠΈΠΆΡΠ΅ ΠΊΠΎΠ΄Π°, ΠΊΠΎΠΉΡΠΎ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π° ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½ΠΎΡΡ, ΠΏΠΎΠ΄ΠΎΠ±Π½Π° Π½Π° Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠ°ΡΠ°, ΠΈ Π³ΠΎ Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠ°ΠΉΡΠ΅. ΠΠΎΠ²Π΅ΡΠ΅ Π΄Π΅ΡΠ°ΠΉΠ»ΠΈ - ΠΏΠΎΠ΄ ΠΊΡΠΎΠΉΠΊΠ°ΡΠ°
ΠΡΠΌΠ° Π΄Π° ΠΊΠΎΠΏΠΈΡΠ°ΠΌ ΠΈ ΠΏΠΎΡΡΠ°Π²ΡΠΌ ΡΠ΅ΡΠ΅ΡΠ΅Π½ΡΠ½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ, Π²ΡΡΠ·ΠΊΠΈ ΠΊΡΠΌ ΠΊΠΎΡΡΠΎ ΡΡΠ°Π΄ΠΈΡΠΈΠΎΠ½Π½ΠΎ ΠΌΠΎΠ³Π°Ρ Π΄Π° Π±ΡΠ΄Π°Ρ Π½Π°ΠΌΠ΅ΡΠ΅Π½ΠΈ Π² ΠΊΡΠ°Ρ Π½Π° ΡΡΠ°ΡΠΈΡΡΠ°, ΡΠ΅ ΠΊΠ°ΠΆΠ° ΡΠ°ΠΌΠΎ, ΡΠ΅ Π² ΠΎΡΠ½ΠΎΠ²Π°ΡΠ° ΡΠΈ TFTP Π΅ ΠΎΠΏΡΠΎΡΡΠ΅Π½ Π²Π°ΡΠΈΠ°Π½Ρ Π½Π° FTP ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π°, Π² ΠΊΠΎΠΉΡΠΎ Π½Π°ΡΡΡΠΎΠΉΠΊΠ°ΡΠ° Π·Π° ΠΊΠΎΠ½ΡΡΠΎΠ» Π½Π° Π΄ΠΎΡΡΡΠΏΠ° ΠΈΠΌΠ° Π΅ ΠΏΡΠ΅ΠΌΠ°Ρ Π½Π°Ρ ΠΈ Π²ΡΡΡΠ½ΠΎΡΡ ΡΡΠΊ Π½ΡΠΌΠ° Π½ΠΈΡΠΎ ΠΎΡΠ²Π΅Π½ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ Π·Π° ΠΏΠΎΠ»ΡΡΠ°Π²Π°Π½Π΅ ΠΈ ΠΏΡΠ΅Ρ Π²ΡΡΠ»ΡΠ½Π΅ Π½Π° ΡΠ°ΠΉΠ». ΠΡΠΏΡΠ΅ΠΊΠΈ ΡΠΎΠ²Π°, Π·Π° Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΠΌ Π½Π°ΡΠ°ΡΠ° ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΌΠ°Π»ΠΊΠΎ ΠΏΠΎ-Π΅Π»Π΅Π³Π°Π½ΡΠ½Π° ΠΈ Π°Π΄Π°ΠΏΡΠΈΡΠ°Π½Π° ΠΊΡΠΌ Π½Π°ΡΡΠΎΡΡΠΈΡΠ΅ ΠΏΡΠΈΠ½ΡΠΈΠΏΠΈ Π½Π° ΠΏΠΈΡΠ°Π½Π΅ Π½Π° ΠΊΠΎΠ΄, ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΡΡ Π΅ Π»Π΅ΠΊΠΎ ΠΏΡΠΎΠΌΠ΅Π½Π΅Π½ - ββΡΠΎΠ²Π° Π½Π΅ ΠΏΡΠΎΠΌΠ΅Π½Ρ ΠΏΡΠΈΠ½ΡΠΈΠΏΠΈΡΠ΅ Π½Π° ΡΠ°Π±ΠΎΡΠ°, Π½ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡΡ, IMHO, ΡΡΠ°Π²Π° ΠΌΠ°Π»ΠΊΠΎ ΠΏΠΎ-Π»ΠΎΠ³ΠΈΡΠ΅Π½ ΠΈ ΡΡΡΠ΅ΡΠ°Π²Π° ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»Π½ΠΈΡΠ΅ Π°ΡΠΏΠ΅ΠΊΡΠΈ Π½Π° FTP ΠΈ TFTP.
ΠΠΎ-ΡΠΏΠ΅ΡΠΈΠ°Π»Π½ΠΎ, ΠΊΠΎΠ³Π°ΡΠΎ ΡΠ΅ ΡΡΠ°ΡΡΠΈΡΠ°, ΠΊΠ»ΠΈΠ΅Π½ΡΡΡ ΠΈΠ·ΠΈΡΠΊΠ²Π° IP Π°Π΄ΡΠ΅ΡΠ° Π½Π° ΡΡΡΠ²ΡΡΠ° ΠΈ ΠΏΠΎΡΡΠ°, Π½Π° ΠΊΠΎΠΉΡΠΎ Π΅ ΠΎΡΠ²ΠΎΡΠ΅Π½ ΠΏΠ΅ΡΡΠΎΠ½Π°Π»ΠΈΠ·ΠΈΡΠ°Π½ΠΈΡΡ TFTP (ΠΏΠΎΡΠ°Π΄ΠΈ Π½Π΅ΡΡΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡ ΡΡΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΈΡ ΠΏΡΠΎΡΠΎΠΊΠΎΠ», ΡΠΌΠ΅ΡΠ½Π°Ρ Π·Π° ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠΎ Π΄Π° ΠΎΡΡΠ°Π²Ρ Π½Π° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΠ° Π΄Π° ΠΈΠ·Π±ΠΈΡΠ° ΠΏΠΎΡΡ), ΡΠ»Π΅Π΄ ΠΊΠΎΠ΅ΡΠΎ Π²ΡΠ·Π½ΠΈΠΊΠ²Π° Π²ΡΡΠ·ΠΊΠ°, Π² ΡΠ΅Π·ΡΠ»ΡΠ°Ρ Π½Π° ΠΊΠΎΠ΅ΡΠΎ ΠΊΠ»ΠΈΠ΅Π½ΡΡΡ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠ·ΠΏΡΠ°ΡΠΈ Π΅Π΄Π½Π° ΠΎΡ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈΡΠ΅ - get ΠΈΠ»ΠΈ put, Π·Π° ΠΏΠΎΠ»ΡΡΠ°Π²Π°Π½Π΅ ΠΈΠ»ΠΈ ΠΈΠ·ΠΏΡΠ°ΡΠ°Π½Π΅ Π½Π° ΡΠ°ΠΉΠ» ΠΊΡΠΌ ΡΡΡΠ²ΡΡΠ°. ΠΡΠΈΡΠΊΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ ΡΠ΅ ΠΈΠ·ΠΏΡΠ°ΡΠ°Ρ Π² Π΄Π²ΠΎΠΈΡΠ΅Π½ ΡΠ΅ΠΆΠΈΠΌ, Π·Π° Π΄Π° ΡΠ΅ ΠΎΠΏΡΠΎΡΡΠΈ Π»ΠΎΠ³ΠΈΠΊΠ°ΡΠ°.
ΠΠ° Π΄Π° ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ°ΠΌ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π°, ΡΡΠ°Π΄ΠΈΡΠΈΠΎΠ½Π½ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ 4 ΠΊΠ»Π°ΡΠ°:
- TFTPClient
- TFTPSΡΡΠ²ΡΡ
- TFTPClientTester
- TFTPServerTester
ΠΠΎΡΠ°Π΄ΠΈ ΡΠ°ΠΊΡΠ°, ΡΠ΅ ΠΊΠ»Π°ΡΠΎΠ²Π΅ΡΠ΅ Π·Π° ΡΠ΅ΡΡΠ²Π°Π½Π΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ²Π°Ρ ΡΠ°ΠΌΠΎ Π·Π° ΠΎΡΡΡΡΠ°Π½ΡΠ²Π°Π½Π΅ Π½Π° Π³ΡΠ΅ΡΠΊΠΈ Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΈΡΠ΅, Π½ΡΠΌΠ° Π΄Π° Π³ΠΈ Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠ°ΠΌ, Π½ΠΎ ΠΊΠΎΠ΄ΡΡ ΡΠ΅ Π±ΡΠ΄Π΅ Π² Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ΡΠΎ; Π²ΡΡΠ·ΠΊΠ°ΡΠ° ΠΊΡΠΌ Π½Π΅Π³ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ Π½Π°ΠΌΠ΅ΡΠ΅Π½Π° Π² ΠΊΡΠ°Ρ Π½Π° ΡΡΠ°ΡΠΈΡΡΠ°. Π‘Π΅Π³Π° ΡΠ΅ ΡΠ°Π·Π³Π»Π΅Π΄Π°ΠΌ ΠΎΡΠ½ΠΎΠ²Π½ΠΈΡΠ΅ ΠΊΠ»Π°ΡΠΎΠ²Π΅.
TFTPClient
ΠΠ°Π΄Π°ΡΠ°ΡΠ° Π½Π° ΡΠΎΠ·ΠΈ ΠΊΠ»Π°Ρ Π΅ Π΄Π° ΡΠ΅ ΡΠ²ΡΡΠΆΠ΅ Ρ ΠΎΡΠ΄Π°Π»Π΅ΡΠ΅Π½ ΡΡΡΠ²ΡΡ ΡΡΠ΅Π· Π½Π΅Π³ΠΎΠ²ΠΈΡ ip ΠΈ Π½ΠΎΠΌΠ΅Ρ Π½Π° ΠΏΠΎΡΡ, Π΄Π° ΠΏΡΠΎΡΠ΅ΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΎΡ Π²Ρ ΠΎΠ΄Π½ΠΈΡ ΠΏΠΎΡΠΎΠΊ (Π² ΡΠΎΠ·ΠΈ ΡΠ»ΡΡΠ°ΠΉ ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΠ°ΡΠ°), Π΄Π° Ρ Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠ°, Π΄Π° Ρ ΠΏΡΠ΅Ρ Π²ΡΡΠ»ΠΈ Π½Π° ΡΡΡΠ²ΡΡΠ° ΠΈ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ ΠΎΡ ΡΠΎΠ²Π° Π΄Π°Π»ΠΈ ΡΡΡΠ±Π²Π° Π΄Π° ΠΈΠ·ΠΏΡΠ°ΡΠΈΡΠ΅ ΠΈΠ»ΠΈ ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ ΡΠ°ΠΉΠ», Π΄Π° Π³ΠΎ ΠΏΡΠ΅Ρ Π²ΡΡΠ»ΠΈΡΠ΅ ΠΈΠ»ΠΈ ΠΏΠΎΠ»ΡΡΠΈΡΠ΅.
ΠΠΎΠ΄ΡΡ Π·Π° ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΊΠ»ΠΈΠ΅Π½ΡΠ° Π·Π° ΡΠ²ΡΡΠ·Π²Π°Π½Π΅ ΠΊΡΠΌ ΡΡΡΠ²ΡΡΠ° ΠΈ ΠΈΠ·ΡΠ°ΠΊΠ²Π°Π½Π΅ Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΎΡ Π²Ρ ΠΎΠ΄Π½ΠΈΡ ΠΏΠΎΡΠΎΠΊ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° ΡΠ°ΠΊΠ°. Π Π΅Π΄ΠΈΡΠ° Π³Π»ΠΎΠ±Π°Π»Π½ΠΈ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ, ΠΊΠΎΠΈΡΠΎ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ ΡΡΠΊ, ΡΠ° ΠΎΠΏΠΈΡΠ°Π½ΠΈ ΠΈΠ·Π²ΡΠ½ ΡΡΠ°ΡΠΈΡΡΠ°, Π² ΠΏΡΠ»Π½ΠΈΡ ΡΠ΅ΠΊΡΡ Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°ΡΠ°. ΠΠΎΡΠ°Π΄ΠΈ ΡΡΡ Π½Π°ΡΠ° ΡΡΠΈΠ²ΠΈΠ°Π»Π½ΠΎΡΡ Π½Π΅ Π³ΠΈ ΡΠΈΡΠΈΡΠ°ΠΌ, Π·Π° Π΄Π° Π½Π΅ Π½Π°ΡΠΎΠ²Π°ΡΠ²Π°ΠΌ ΡΡΠ°ΡΠΈΡΡΠ°.
public void run(String ip, int port)
{
this.ip = ip;
this.port = port;
try {
inicialization();
Scanner keyboard = new Scanner(System.in);
while (isRunning) {
getAndParseInput(keyboard);
sendCommand();
selector();
}
}
catch (Exception e) {
System.out.println(e.getMessage());
}
}
ΠΠ΅ΠΊΠ° Π΄Π° ΡΠ°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΠΌΠ΅ΡΠΎΠ΄ΠΈΡΠ΅, ΠΈΠ·Π²ΠΈΠΊΠ°Π½ΠΈ Π² ΡΠΎΠ·ΠΈ Π±Π»ΠΎΠΊ ΠΊΠΎΠ΄:
Π’ΡΠΊ ΡΠ΅ ΠΈΠ·ΠΏΡΠ°ΡΠ° ΡΠ°ΠΉΠ»ΡΡ - Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° ΡΠΊΠ΅Π½Π΅Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΡΠΌΠ΅ ΡΡΠ΄ΡΡΠΆΠ°Π½ΠΈΠ΅ΡΠΎ Π½Π° ΡΠ°ΠΉΠ»Π° ΠΊΠ°ΡΠΎ ΠΌΠ°ΡΠΈΠ² ΠΎΡ Π±Π°ΠΉΡΠΎΠ²Π΅, ΠΊΠΎΠΈΡΠΎ Π·Π°ΠΏΠΈΡΠ²Π°ΠΌΠ΅ Π΅Π΄ΠΈΠ½ ΠΏΠΎ Π΅Π΄ΠΈΠ½ Π² ΡΠΎΠΊΠ΅ΡΠ°, ΡΠ»Π΅Π΄ ΠΊΠΎΠ΅ΡΠΎ Π³ΠΎ Π·Π°ΡΠ²Π°ΡΡΠΌΠ΅ ΠΈ ΠΎΡΠ²Π°ΡΡΠΌΠ΅ ΠΎΡΠ½ΠΎΠ²ΠΎ (Π½Π΅ Π΅ Π½Π°ΠΉ-ΠΎΡΠ΅Π²ΠΈΠ΄Π½ΠΎΡΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅, Π½ΠΎ Π³Π°ΡΠ°Π½ΡΠΈΡΠ° ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Π²Π°Π½Π΅ΡΠΎ Π½Π° ΡΠ΅ΡΡΡΡΠΈ), ΡΠ»Π΅Π΄ ΠΊΠΎΠ΅ΡΠΎ ΠΏΠΎΠΊΠ°Π·Π²Π°ΠΌΠ΅ ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π·Π° ΡΡΠΏΠ΅ΡΠ½ΠΎ ΠΏΡΠ΅Ρ Π²ΡΡΠ»ΡΠ½Π΅.
private void put(String sourcePath, String destPath)
{
File src = new File(sourcePath);
try {
InputStream scanner = new FileInputStream(src);
byte[] bytes = scanner.readAllBytes();
for (byte b : bytes)
sout.write(b);
sout.close();
inicialization();
System.out.println("nDonen");
}
catch (Exception e) {
System.out.println(e.getMessage());
}
}
Π’ΠΎΠ·ΠΈ ΠΊΠΎΠ΄ΠΎΠ² ΡΡΠ°Π³ΠΌΠ΅Π½Ρ ΠΎΠΏΠΈΡΠ²Π° ΠΈΠ·Π²Π»ΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° Π΄Π°Π½Π½ΠΈ ΠΎΡ ΡΡΡΠ²ΡΡΠ°. ΠΡΠΈΡΠΊΠΎ ΠΎΡΠ½ΠΎΠ²ΠΎ Π΅ ΡΡΠΈΠ²ΠΈΠ°Π»Π½ΠΎ, ΡΠ°ΠΌΠΎ ΠΏΡΡΠ²ΠΈΡΡ Π±Π»ΠΎΠΊ ΠΎΡ ΠΊΠΎΠ΄ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ²Π° ΠΈΠ½ΡΠ΅ΡΠ΅Ρ. ΠΠ° Π΄Π° ΡΠ°Π·Π±Π΅ΡΠ΅ΡΠ΅ ΡΠΎΡΠ½ΠΎ ΠΊΠΎΠ»ΠΊΠΎ Π±Π°ΠΉΡΠ° ΡΡΡΠ±Π²Π° Π΄Π° Π±ΡΠ΄Π°Ρ ΠΏΡΠΎΡΠ΅ΡΠ΅Π½ΠΈ ΠΎΡ ΡΠΎΠΊΠ΅ΡΠ°, ΡΡΡΠ±Π²Π° Π΄Π° Π·Π½Π°Π΅ΡΠ΅ ΠΊΠΎΠ»ΠΊΠΎ ΡΠ΅ΠΆΠΈ ΠΏΡΠ΅Ρ Π²ΡΡΠ»Π΅Π½ΠΈΡΡ ΡΠ°ΠΉΠ». Π Π°Π·ΠΌΠ΅ΡΡΡ Π½Π° ΡΠ°ΠΉΠ»Π° Π½Π° ΡΡΡΠ²ΡΡΠ° Π΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π΅Π½ ΠΊΠ°ΡΠΎ Π΄ΡΠ»Π³ΠΎ ΡΡΠ»ΠΎ ΡΠΈΡΠ»ΠΎ, ΡΠ°ΠΊΠ° ΡΠ΅ ΡΡΠΊ ΡΠ΅ ΠΏΡΠΈΠ΅ΠΌΠ°Ρ 4 Π±Π°ΠΉΡΠ°, ΠΊΠΎΠΈΡΠΎ Π²ΠΏΠΎΡΠ»Π΅Π΄ΡΡΠ²ΠΈΠ΅ ΡΠ΅ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ²Π°Ρ Π² Π΅Π΄Π½ΠΎ ΡΠΈΡΠ»ΠΎ. Π’ΠΎΠ²Π° Π½Π΅ Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ Π½Π° Java, ΡΠΎΠΉ Π΅ Π΄ΠΎΡΡΠ° ΠΏΠΎΠ΄ΠΎΠ±Π΅Π½ Π·Π° SI, Π½ΠΎ ΡΠ΅ΡΠ°Π²Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° ΠΌΡ.
Π’ΠΎΠ³Π°Π²Π° Π²ΡΠΈΡΠΊΠΎ Π΅ ΡΡΠΈΠ²ΠΈΠ°Π»Π½ΠΎ - ΠΏΠΎΠ»ΡΡΠ°Π²Π°ΠΌΠ΅ ΠΈΠ·Π²Π΅ΡΡΠ΅Π½ Π±ΡΠΎΠΉ Π±Π°ΠΉΡΠΎΠ²Π΅ ΠΎΡ ΡΠΎΠΊΠ΅ΡΠ° ΠΈ Π³ΠΈ Π·Π°ΠΏΠΈΡΠ²Π°ΠΌΠ΅ Π²ΡΠ² ΡΠ°ΠΉΠ», ΡΠ»Π΅Π΄ ΠΊΠΎΠ΅ΡΠΎ ΠΏΠΎΠΊΠ°Π·Π²Π°ΠΌΠ΅ ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π·Π° ΡΡΠΏΠ΅Ρ .
private void get(String sourcePath, String destPath){
long sizeOfFile = 0;
try {
byte[] sizeBytes = new byte[Long.SIZE];
for (int i =0; i< Long.SIZE/Byte.SIZE; i++)
{
sizeBytes[i] = (byte)sin.read();
sizeOfFile*=256;
sizeOfFile+=sizeBytes[i];
}
FileOutputStream writer = new FileOutputStream(new File(destPath));
for (int i =0; i < sizeOfFile; i++)
{
writer.write(sin.read());
}
writer.close();
System.out.println("nDONEn");
}
catch (Exception e){
System.out.println(e.getMessage());
}
}
ΠΠΊΠΎ Π² ΠΏΡΠΎΠ·ΠΎΡΠ΅ΡΠ° Π½Π° ΠΊΠ»ΠΈΠ΅Π½ΡΠ° Π΅ Π²ΡΠ²Π΅Π΄Π΅Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°, ΡΠ°Π·Π»ΠΈΡΠ½Π° ΠΎΡ get ΠΈΠ»ΠΈ put, ΡΠ΅ Π±ΡΠ΄Π΅ ΠΈΠ·Π²ΠΈΠΊΠ°Π½Π° ΡΡΠ½ΠΊΡΠΈΡΡΠ° showErrorMessage, ΠΊΠΎΠ΅ΡΠΎ ΠΏΠΎΠΊΠ°Π·Π²Π°, ΡΠ΅ Π²ΡΠ²Π΅ΠΆΠ΄Π°Π½Π΅ΡΠΎ Π΅ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»Π½ΠΎ. ΠΠΎΡΠ°Π΄ΠΈ ΡΡΠΈΠ²ΠΈΠ°Π»Π½ΠΎΡΡ Π½ΡΠΌΠ° Π΄Π° Π³ΠΎ ΡΠΈΡΠΈΡΠ°ΠΌ. ΠΠ°Π»ΠΊΠΎ ΠΏΠΎ-ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½Π° Π΅ ΡΡΠ½ΠΊΡΠΈΡΡΠ° Π·Π° ΠΏΠΎΠ»ΡΡΠ°Π²Π°Π½Π΅ ΠΈ ΡΠ°Π·Π΄Π΅Π»ΡΠ½Π΅ Π½Π° Π²Ρ ΠΎΠ΄Π½ΠΈΡ Π½ΠΈΠ·. ΠΡΠ΅ΠΊΠ°ΡΠ²Π°ΠΌΠ΅ ΡΠΊΠ΅Π½Π΅ΡΠ° Π² Π½Π΅Π³ΠΎ, ΠΎΡ ΠΊΠΎΠΉΡΠΎ ΠΎΡΠ°ΠΊΠ²Π°ΠΌΠ΅ Π΄Π° ΠΏΠΎΠ»ΡΡΠΈΠΌ ΡΠ΅Π΄, ΡΠ°Π·Π΄Π΅Π»Π΅Π½ Ρ Π΄Π²Π° ΠΈΠ½ΡΠ΅ΡΠ²Π°Π»Π° ΠΈ ΡΡΠ΄ΡΡΠΆΠ°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ°, Π°Π΄ΡΠ΅ΡΠ° Π½Π° ΠΈΠ·ΡΠΎΡΠ½ΠΈΠΊΠ° ΠΈ Π°Π΄ΡΠ΅ΡΠ° Π½Π° Π΄Π΅ΡΡΠΈΠ½Π°ΡΠΈΡΡΠ°.
private void getAndParseInput(Scanner scanner)
{
try {
input = scanner.nextLine().split(" ");
typeOfCommand = input[0];
sourcePath = input[1];
destPath = input[2];
}
catch (Exception e) {
System.out.println("Bad input");
}
}
ΠΠ·ΠΏΡΠ°ΡΠ°Π½Π΅ Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°βΠΏΡΠ΅Π΄Π°Π²Π° Π²ΡΠ²Π΅Π΄Π΅Π½Π°ΡΠ° ΠΎΡ ΡΠΊΠ΅Π½Π΅ΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΊΡΠΌ ΡΠΎΠΊΠ΅ΡΠ° ΠΈ ΠΏΡΠΈΠ½ΡΠΆΠ΄Π°Π²Π° Π΄Π° Π±ΡΠ΄Π΅ ΠΈΠ·ΠΏΡΠ°ΡΠ΅Π½Π°
private void sendCommand()
{
try {
for (String str : input) {
for (char ch : str.toCharArray()) {
sout.write(ch);
}
sout.write(' ');
}
sout.write('n');
}
catch (Exception e) {
System.out.print(e.getMessage());
}
}
Π‘Π΅Π»Π΅ΠΊΡΠΎΡΡΡ Π΅ ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΡΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Ρ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΡΠ° Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°ΡΠ° Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ ΠΎΡ Π²ΡΠ²Π΅Π΄Π΅Π½ΠΈΡ Π½ΠΈΠ·. ΠΡΠΈΡΠΊΠΎ ΡΡΠΊ Π½Π΅ Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΊΡΠ°ΡΠΈΠ²ΠΎ ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈΡΡ ΡΡΠΈΠΊ Π½Π΅ Π΅ Π½Π°ΠΉ-Π΄ΠΎΠ±ΡΠΈΡΡ Ρ ΠΏΡΠΈΠ½ΡΠ΄ΠΈΡΠ΅Π»Π½ΠΎ ΠΈΠ·Π»ΠΈΠ·Π°Π½Π΅ ΠΈΠ·Π²ΡΠ½ ΠΊΠΎΠ΄ΠΎΠ²ΠΈΡ Π±Π»ΠΎΠΊ, Π½ΠΎ ΠΎΡΠ½ΠΎΠ²Π½Π°ΡΠ° ΠΏΡΠΈΡΠΈΠ½Π° Π·Π° ΡΠΎΠ²Π° Π΅ Π»ΠΈΠΏΡΠ°ΡΠ° Π² Java Π½Π° Π½ΡΠΊΠΎΠΈ Π½Π΅ΡΠ°, ΠΊΠ°ΡΠΎ Π΄Π΅Π»Π΅Π³Π°ΡΠΈ Π² C#, ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ Π½Π° ΡΡΠ½ΠΊΡΠΈΠΈ ΠΎΡ C++ ΠΈΠ»ΠΈ Π² Π½Π°ΠΉ-ΠΌΠ°Π»ΠΊΠΎ ΡΠΆΠ°ΡΠ½ΠΎΡΠΎ ΠΈ ΡΠΆΠ°ΡΠ½ΠΎ goto, ΠΊΠΎΠ΅ΡΠΎ Π²ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄Π° ΠΏΡΠΈΠ»ΠΎΠΆΠΈΡΠ΅ ΡΠΎΠ²Π° ΠΊΡΠ°ΡΠΈΠ²ΠΎ. ΠΠΊΠΎ Π·Π½Π°Π΅ΡΠ΅ ΠΊΠ°ΠΊ Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΡΠ΅ ΠΊΠΎΠ΄Π° ΠΌΠ°Π»ΠΊΠΎ ΠΏΠΎ-Π΅Π»Π΅Π³Π°Π½ΡΠ΅Π½, ΠΏΡΠΈΠ²Π΅ΡΡΡΠ²Π°ΠΌ ΠΊΡΠΈΡΠΈΠΊΠΈΡΠ΅ Π² ΠΊΠΎΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ΅. Π‘ΡΡΡΠ²Π° ΠΌΠΈ ΡΠ΅, ΡΠ΅ ΡΡΠΊ Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌ ΡΠ΅ΡΠ½ΠΈΠΊ String-delegate, Π½ΠΎ Π½ΡΠΌΠ° Π΄Π΅Π»Π΅Π³Π°Ρ...
private void selector()
{
do{
if (typeOfCommand.equals("get")){
get(sourcePath, destPath);
break;
}
if (typeOfCommand.equals("put")){
put(sourcePath, destPath);
break;
}
showErrorMessage();
}
while (false);
}
}
TFTPSΡΡΠ²ΡΡ
Π€ΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½ΠΎΡΡΡΠ° Π½Π° ΡΡΡΠ²ΡΡΠ° ΡΠ΅ ΡΠ°Π·Π»ΠΈΡΠ°Π²Π° ΠΎΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½ΠΎΡΡΡΠ° Π½Π° ΠΊΠ»ΠΈΠ΅Π½ΡΠ° ΠΊΠ°ΡΠΎ ΡΡΠ»ΠΎ ΡΠ°ΠΌΠΎ ΠΏΠΎ ΡΠΎΠ²Π°, ΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈΡΠ΅ ΠΈΠ΄Π²Π°Ρ ΠΊΡΠΌ Π½Π΅Π³ΠΎ Π½Π΅ ΠΎΡ ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΠ°ΡΠ°, Π° ΠΎΡ ΡΠΎΠΊΠ΅ΡΠ°. ΠΡΠΊΠΎΠΈ ΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ΠΈΡΠ΅ ΠΊΠ°ΡΠΎ ΡΡΠ»ΠΎ ΡΠ° Π΅Π΄Π½Π°ΠΊΠ²ΠΈ, ΡΠ°ΠΊΠ° ΡΠ΅ Π½ΡΠΌΠ° Π΄Π° Π³ΠΈ ΡΠΈΡΠΈΡΠ°ΠΌ, Π° ΡΠ°ΠΌΠΎ ΡΠ΅ Π·Π°ΡΠ΅Π³Π½Π° ΡΠ°Π·Π»ΠΈΠΊΠΈΡΠ΅.
ΠΠ° Π½Π°ΡΠ°Π»ΠΎ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΌΠ΅ΡΠΎΠ΄ΡΡ run, ΠΊΠΎΠΉΡΠΎ ΠΏΠΎΠ»ΡΡΠ°Π²Π° ΠΏΠΎΡΡ ΠΊΠ°ΡΠΎ Π²Ρ ΠΎΠ΄ ΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ²Π° Π²Ρ ΠΎΠ΄Π½ΠΈΡΠ΅ Π΄Π°Π½Π½ΠΈ ΠΎΡ ΡΠΎΠΊΠ΅ΡΠ° Π²ΡΠ² Π²Π΅ΡΠ΅Π½ ΡΠΈΠΊΡΠ».
public void run(int port) {
this.port = port;
incialization();
while (true) {
getAndParseInput();
selector();
}
}
ΠΠ΅ΡΠΎΠ΄ΡΡ put, ΠΊΠΎΠΉΡΠΎ ΠΎΠ±Π²ΠΈΠ²Π° ΠΌΠ΅ΡΠΎΠ΄Π° writeToFileFromSocket, ΠΊΠΎΠΉΡΠΎ ΠΎΡΠ²Π°ΡΡ ΠΏΠΎΡΠΎΠΊ Π·Π° Π·Π°ΠΏΠΈΡ Π²ΡΠ² ΡΠ°ΠΉΠ» ΠΈ Π·Π°ΠΏΠΈΡΠ²Π° Π²ΡΠΈΡΠΊΠΈ Π²Ρ ΠΎΠ΄Π½ΠΈ Π±Π°ΠΉΡΠΎΠ²Π΅ ΠΎΡ ΡΠΎΠΊΠ΅ΡΠ°, ΠΏΠΎΠΊΠ°Π·Π²Π° ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΠ΅, ΡΠΊΠ°Π·Π²Π°ΡΠΎ ΡΡΠΏΠ΅ΡΠ½ΠΎΡΠΎ Π·Π°Π²ΡΡΡΠ²Π°Π½Π΅ Π½Π° ΠΏΡΠ΅Ρ Π²ΡΡΠ»ΡΠ½Π΅ΡΠΎ, ΠΊΠΎΠ³Π°ΡΠΎ Π·Π°ΠΏΠΈΡΡΡ ΠΏΡΠΈΠΊΠ»ΡΡΠΈ.
private void put(String source, String dest){
writeToFileFromSocket();
System.out.print("nDonen");
};
private void writeToFileFromSocket()
{
try {
FileOutputStream writer = new FileOutputStream(new File(destPath));
byte[] bytes = sin.readAllBytes();
for (byte b : bytes) {
writer.write(b);
}
writer.close();
}
catch (Exception e){
System.out.println(e.getMessage());
}
}
ΠΠ΅ΡΠΎΠ΄ΡΡ get ΠΈΠ·Π²Π»ΠΈΡΠ° ΡΡΡΠ²ΡΡΠ½ΠΈΡ ΡΠ°ΠΉΠ». ΠΠ°ΠΊΡΠΎ Π²Π΅ΡΠ΅ Π±Π΅ΡΠ΅ ΡΠΏΠΎΠΌΠ΅Π½Π°ΡΠΎ Π² ΡΠ°Π·Π΄Π΅Π»Π° ΠΎΡ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠ°ΡΠ° ΡΡΡΠ°Π½Π° Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°ΡΠ°, Π·Π° Π΄Π° ΠΏΡΠ΅Ρ Π²ΡΡΠ»ΠΈΡΠ΅ ΡΡΠΏΠ΅ΡΠ½ΠΎ ΡΠ°ΠΉΠ», ΡΡΡΠ±Π²Π° Π΄Π° Π·Π½Π°Π΅ΡΠ΅ ΡΠ°Π·ΠΌΠ΅ΡΠ° ΠΌΡ, ΡΡΡ ΡΠ°Π½Π΅Π½ Π² Π΄ΡΠ»Π³ΠΎ ΡΡΠ»ΠΎ ΡΠΈΡΠ»ΠΎ, ΡΠ°ΠΊΠ° ΡΠ΅ Π³ΠΎ ΡΠ°Π·Π΄Π΅Π»ΡΠΌ Π½Π° ΠΌΠ°ΡΠΈΠ² ΠΎΡ 4 Π±Π°ΠΉΡΠ°, ΠΏΡΠ΅Ρ Π²ΡΡΠ»ΡΠΌ Π³ΠΈ Π±Π°ΠΉΡ ΠΏΠΎ Π±Π°ΠΉΡ ΠΊΡΠΌ ΡΠΎΠΊΠ΅ΡΠ° ΠΈ ΡΠ»Π΅Π΄ ΡΠΎΠ²Π°, ΡΠ»Π΅Π΄ ΠΊΠ°ΡΠΎ Π³ΠΈ ΠΏΠΎΠ»ΡΡΠΈΡ ΠΈ ΡΠ³Π»ΠΎΠ±ΠΈΡ Π½Π° ΠΊΠ»ΠΈΠ΅Π½ΡΠ° Π² Π½ΠΎΠΌΠ΅Ρ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ, ΠΏΡΠ΅Ρ Π²ΡΡΠ»ΡΠΌ Π²ΡΠΈΡΠΊΠΈ Π±Π°ΠΉΡΠΎΠ²Π΅, ΠΊΠΎΠΈΡΠΎ ΡΡΡΡΠ°Π²ΡΡ ΡΠ°ΠΉΠ»Π°, ΠΏΡΠΎΡΠ΅ΡΠ΅Π½ΠΈ ΠΎΡ Π²Ρ ΠΎΠ΄Π½ΠΈΡ ΠΏΠΎΡΠΎΠΊ ΠΎΡ ΡΠ°ΠΉΠ»Π°.
private void get(String source, String dest){
File sending = new File(source);
try {
FileInputStream readFromFile = new FileInputStream(sending);
byte[] arr = readFromFile.readAllBytes();
byte[] bytes = ByteBuffer.allocate(Long.SIZE / Byte.SIZE).putLong(sending.length()).array();
for (int i = 0; i<Long.SIZE / Byte.SIZE; i++)
sout.write(bytes[i]);
sout.flush();
for (byte b : arr)
sout.write(b);
}
catch (Exception e){
System.out.println(e.getMessage());
}
};
ΠΠ΅ΡΠΎΠ΄ΡΡ getAndParseInput Π΅ ΡΡΡΠΈΡΡ ΠΊΠ°ΡΠΎ Π² ΠΊΠ»ΠΈΠ΅Π½ΡΠ°, ΠΊΠ°ΡΠΎ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π°ΡΠ° ΡΠ°Π·Π»ΠΈΠΊΠ° Π΅, ΡΠ΅ ΡΠ΅ΡΠ΅ Π΄Π°Π½Π½ΠΈ ΠΎΡ ΡΠΎΠΊΠ΅ΡΠ°, Π° Π½Π΅ ΠΎΡ ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΠ°ΡΠ°. ΠΠΎΠ΄ΡΡ Π΅ Π² Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ΡΠΎ, ΡΠΎΡΠ½ΠΎ ΠΊΠ°ΡΠΎ ΡΠ΅Π»Π΅ΠΊΡΠΎΡ.
Π ΡΠΎΠ·ΠΈ ΡΠ»ΡΡΠ°ΠΉ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡΡΠ° ΡΠ΅ ΠΏΠΎΡΡΠ°Π²Ρ Π² ΠΎΡΠ΄Π΅Π»Π΅Π½ Π±Π»ΠΎΠΊ ΠΊΠΎΠ΄, Ρ.ΠΊ Π² ΡΠ°ΠΌΠΊΠΈΡΠ΅ Π½Π° ΡΠ°Π·ΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ, ΡΠ»Π΅Π΄ ΠΊΠ°ΡΠΎ ΠΏΡΠ΅Ρ
Π²ΡΡΠ»ΡΠ½Π΅ΡΠΎ ΠΏΡΠΈΠΊΠ»ΡΡΠΈ, ΡΠ΅ΡΡΡΡΠΈΡΠ΅ ΡΠ΅ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Π²Π°Ρ ΠΈ Π·Π°Π΅ΠΌΠ°Ρ ΠΎΡΠ½ΠΎΠ²ΠΎ - ΠΎΡΠ½ΠΎΠ²ΠΎ, Π·Π° Π΄Π° ΡΠ΅ ΠΎΡΠΈΠ³ΡΡΠΈ Π·Π°ΡΠΈΡΠ° ΡΡΠ΅ΡΡ ΠΈΠ·ΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΏΠ°ΠΌΠ΅Ρ.
private void incialization()
{
try {
serverSocket = new ServerSocket(port);
socket = serverSocket.accept();
sin = socket.getInputStream();
sout = socket.getOutputStream();
}
catch (Exception e) {
System.out.print(e.getMessage());
}
}
ΠΠ° ΠΎΠ±ΠΎΠ±ΡΠΈΠΌ:
Π’ΠΎΠΊΡ-ΡΠΎ Π½Π°ΠΏΠΈΡΠ°Ρ ΠΌΠ΅ Π½Π°ΡΠΈΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½ Π²Π°ΡΠΈΠ°Π½Ρ Π½Π° ΠΏΡΠΎΡΡ ΠΏΡΠΎΡΠΎΠΊΠΎΠ» Π·Π° ΠΏΡΠ΅Π½ΠΎΡ Π½Π° Π΄Π°Π½Π½ΠΈ ΠΈ ΡΠ°Π·Π±ΡΠ°Ρ ΠΌΠ΅ ΠΊΠ°ΠΊ ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ°Π±ΠΎΡΠΈ. ΠΠΎ ΠΏΡΠΈΠ½ΡΠΈΠΏ Π½Π΅ ΠΎΡΠΊΡΠΈΡ ΠΠΌΠ΅ΡΠΈΠΊΠ° ΡΡΠΊ ΠΈ Π½Π΅ Π½Π°ΠΏΠΈΡΠ°Ρ ΠΌΠ½ΠΎΠ³ΠΎ Π½ΠΎΠ²ΠΈ Π½Π΅ΡΠ°, Π½ΠΎ Π½ΡΠΌΠ°ΡΠ΅ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ ΡΡΠ°ΡΠΈΠΈ Π½Π° HabrΓ© ΠΈ ββΠΊΠ°ΡΠΎ ΡΠ°ΡΡ ΠΎΡ ΠΏΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° ΠΏΠΎΡΠ΅Π΄ΠΈΡΠ° ΠΎΡ ΡΡΠ°ΡΠΈΠΈ Π·Π° cmd ΠΏΠΎΠΌΠΎΡΠ½ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈ Π±Π΅ΡΠ΅ Π½Π΅Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎ Π΄Π° Π½Π΅ ΡΠ΅ Π΄ΠΎΠΊΠΎΡΠ½Π° Π΄ΠΎ Π½Π΅Π³ΠΎ.
Π·Π° ΡΠΏΡΠ°Π²ΠΊΠ°:
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: www.habr.com