ΠΡΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ Π½Π°ΡΠ°ΡΡΠΉ ΡΠΈΠΊΠ» ΡΡΠ°ΡΠ΅ΠΉ, ΠΏΠΎΡΠ²ΡΡΠ΅Π½Π½ΡΠΉ ΠΊΠ°ΡΡΠΎΠΌΠ½ΡΠΌ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡΠΌ ΠΊΠΎΠ½ΡΠΎΠ»ΡΠ½ΡΡ ΡΡΠΈΠ»ΠΈΡ Windows Π½Π΅Π»ΡΠ·Ρ Π½Π΅ Π·Π°ΡΡΠΎΠ½ΡΡΡ TFTP (Trivial File Transfer Protocol) β ΠΏΡΠΎΡΡΠΎΠΉ ΠΏΡΠΎΡΠΎΠΊΠΎΠ» ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ ΡΠ°ΠΉΠ»ΠΎΠ².
ΠΠ°ΠΊ ΠΈ Π² ΠΏΡΠΎΡΠ»ΠΎΠΉ ΡΠ°Π·, ΠΊΡΠ°ΡΠΊΠΎ ΠΏΡΠΎΠ±Π΅ΠΆΠΈΠΌΡΡ ΠΏΠΎ ΡΠ΅ΠΎΡΠΈΠΈ, ΡΠ²ΠΈΠ΄ΠΈΠΌ ΠΊΠΎΠ΄, ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΠΈΠΉ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π», Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΡΠΉ ΡΡΠ΅Π±ΡΠ΅ΠΌΠΎΠΌΡ, ΠΈ ΠΏΡΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡΡΠ΅ΠΌ Π΅Π³ΠΎ. ΠΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ β ΠΏΠΎΠ΄ ΠΊΠ°ΡΠΎΠΌ
ΠΠ΅ Π±ΡΠ΄Ρ ΠΊΠΎΠΏΠΈΠΏΠ°ΡΡΠΈΡΡ ΡΠΏΡΠ°Π²ΠΎΡΠ½ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ, ΡΡΡΠ»ΠΊΠΈ Π½Π° ΠΊΠΎΡΠΎΡΡΡ ΡΡΠ°Π΄ΠΈΡΠΈΠΎΠ½Π½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡΠΈ Π² ΠΊΠΎΠ½ΡΠ΅ ΡΡΠ°ΡΡΠΈ, ΡΠΊΠ°ΠΆΡ Π»ΠΈΡΡ, ΡΡΠΎ ΠΏΠΎ ΡΠ²ΠΎΠ΅ΠΉ ΡΡΡΠΈ TFTP β ΡΠΏΡΠΎΡΠ΅Π½Π½Π°Ρ Π²Π°ΡΠΈΠ°ΡΠΈΡ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π° FTP, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΠ±ΡΠ°Π½Π° Π½Π°ΡΡΡΠΎΠΉΠΊΠ° ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ Π΄ΠΎΡΡΡΠΏΠ°, Π΄Π° ΠΈ ΠΏΠΎ ΡΡΡΠΈ ΡΡΡ Π½Π΅Ρ Π½ΠΈΡΠ΅Π³ΠΎ ΠΊΡΠΎΠΌΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ ΡΠ°ΠΉΠ»Π°. ΠΠ΄Π½Π°ΠΊΠΎ, Π΄Π°Π±Ρ ΡΠ΄Π΅Π»Π°ΡΡ Π½Π°ΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΡΡΡ Π±ΠΎΠ»Π΅Π΅ ΠΈΠ·ΡΡΠ½ΠΎΠΉ ΠΈ Π°Π΄Π°ΠΏΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΉ ΠΊ Π½ΡΠ½Π΅ΡΠ½ΠΈΠΌ ΠΏΡΠΈΠ½ΡΠΈΠΏΠ°ΠΌ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ ΠΊΠΎΠ΄Π°, ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ β ΠΏΡΠΈΠ½ΡΠΈΠΏΠΎΠ² ΡΠ°Π±ΠΎΡΡ ΡΡΠΎ Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅Ρ, Π½ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ, ΠΠΠ₯Π, ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ ΡΡΡΡ Π±ΠΎΠ»Π΅Π΅ Π»ΠΎΠ³ΠΈΡΠ½ΡΠΌ ΠΈ ΡΠΎΡΠ΅ΡΠ°Π΅Ρ Π² ΡΠ΅Π±Π΅ ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΡΠΎΡΠΎΠ½Ρ FTP ΠΈ TFTP.
Π ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ, ΠΏΡΠΈ Π·Π°ΠΏΡΡΠΊΠ΅ ΠΊΠ»ΠΈΠ΅Π½Ρ Π·Π°ΠΏΡΠ°ΡΠΈΠ²Π°Π΅Ρ ip Π°Π΄ΡΠ΅Ρ ΡΠ΅ΡΠ²Π΅ΡΠ° ΠΈ ΠΏΠΎΡΡ, Π½Π° ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΎΡΠΊΡΡΡ ΠΊΠ°ΡΡΠΎΠΌΠ½ΡΠΉ TFTP (Π² ΡΠΈΠ»Ρ Π½Π΅ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΠΈ Ρ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΌ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»ΠΎΠΌ Ρ ΡΡΠ΅Π» ΡΠΌΠ΅ΡΡΠ½ΡΠΌ ΠΎΡΡΠ°Π²ΠΈΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π²ΡΠ±ΠΎΡΠ° ΠΏΠΎΡΡΠ° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ), ΠΏΠΎΡΠ»Π΅ ΡΠ΅Π³ΠΎ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅, Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ ΠΌΠΎΠΆΠ΅Ρ ΠΎΠΏΡΠ°Π²ΠΈΡΡ ΠΎΠ΄Π½Ρ ΠΈΠ· ΠΊΠΎΠΌΠ°Π½Π΄ β get ΠΈΠ»ΠΈ put, Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΠΈΠ»ΠΈ ΠΎΡΠΏΡΠ°Π²ΠΊΠΈ ΡΠ°ΠΉΠ»Π° Π½Π° ΡΠ΅ΡΠ²Π΅Ρ. ΠΡΠ΅ ΡΠ°ΠΉΠ»Ρ ΠΎΡΠΏΡΠ°Π²Π»ΡΡΡΡΡ Π² Π±ΠΈΠ½Π°ΡΠ½ΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅ β Π² ΡΠ΅Π»ΡΡ ΡΠΏΡΠΎΡΠ΅Π½ΠΈΡ Π»ΠΎΠ³ΠΈΠΊΠΈ.
ΠΠ»Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΡΠΎΡΠΎΠΎΠ»Π° ΠΌΠ½ΠΎΡ Π±ΡΠ»ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΎ ΡΡΠ°Π΄ΠΈΡΠΈΠΎΠ½Π½ΠΎ 4 ΠΊΠ»Π°ΡΡΠ°:
- TFTPClient
- TFTPServer
- 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 Π±Π°ΠΉΡΠ°, ΠΊΠΎΡΠΎΡΡΠ΅ Π² ΠΏΠΎΡΠ»Π΅Π΄ΡΡΠ²ΠΈΠΈ ΠΊΠΎΠ½Π²Π΅ΡΡΠΈΡΡΡΡΡΡ Π² ΠΎΠ΄Π½ΠΎ ΡΠΈΡΠ»ΠΎ. ΠΡΠΎ Π½Π΅ ΠΎΡΠ΅Π½Ρ ΠΠΆΠ°Π²Π½ΡΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄, ΡΠ°ΠΊΠΎΠ΅ ΡΠΊΠΎΡΠ΅Π΅ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ Π΄Π»Ρ Π‘Π, Π½ΠΎ ΡΠ²ΠΎΡ Π·Π°Π΄Π°ΡΡ ΠΎΠ½ΠΎ ΡΠ΅ΡΠ°Π΅Ρ.
ΠΠ°Π»ΡΡΠ΅ Π²ΡΠ΅ ΡΡΠΈΠ²ΠΈΠ°Π»ΡΠ½ΠΎ β ΠΌΡ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ Π±Π°ΠΉΡΠΎΠ² Ρ ΡΠΎΠΊΠ΅ΡΠ° ΠΈ Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅ΠΌ ΠΈΡ Π² ΡΠ°ΠΉΠ», ΠΏΠΎΡΠ»Π΅ ΡΠ΅Π³ΠΎ Π²ΡΠ²ΠΎΠ΄ΠΈΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎΠ± ΡΡΠΏΠ΅Ρ Π΅.
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());
}
}
Π‘Π΅Π»Π΅ΠΊΡΠΎΡ β ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ Π²Π²Π΅Π΄Π΅Π½Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ. Π’ΡΡ Π²ΡΠ΅ Π½Π΅ ΠΎΡΠ΅Π½Ρ ΠΊΡΠ°ΡΠΈΠ²ΠΎ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π½Π΅ ΡΠ°ΠΌΡΠΉ Ρ ΠΎΡΠΎΡΠΈΠΉ ΠΏΡΠΈΠ΅ΠΌ Ρ ΠΏΡΠΈΠ½ΡΠ΄ΠΈΡΠ΅Π»ΡΠ½ΡΠΌ Π²ΡΡ ΠΎΠ΄ΠΎΠΌ Π·Π° ΠΏΡΠ΅Π΄Π΅Π»Ρ Π±Π»ΠΎΠΊΠ° ΠΊΠΎΠ΄Π°, Π½ΠΎ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΠΏΡΠΈΡΠΈΠ½ΠΎΠΉ ΡΡΠΎΠ³ΠΎ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΡΡΡΡΡΡΠ²ΠΈΠ΅ Π² ΠΠΆΠ°Π²Π΅ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ Π²Π΅ΡΠ΅ΠΉ, ΠΊΠ°ΠΊ Π΄Π΅Π»Π΅Π³Π°ΡΡ Π² Π‘#, ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ Π½Π° ΡΡΠ½ΠΊΡΠΈΡ ΠΈΠ· 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);
}
}
TFTPServer
Π€ΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π» ΡΠ΅ΡΠ²Π΅ΡΠ° ΠΎΡΠ»ΠΈΡΠ°Π΅ΡΡΡ ΠΎΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π° ΠΊΠ»ΠΈΠ΅Π½ΡΠ° ΠΏΠΎ Π±ΠΎΠ»ΡΡΠΎΠΌΡ ΡΡΠ΅ΡΡ Π»ΠΈΡΡ ΡΠ΅ΠΌ, ΡΡΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π½Π° Π½Π΅Π³ΠΎ ΠΏΡΠΈΡ ΠΎΠ΄ΡΡ Π½Π΅ Ρ ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΡ, Π° ΠΈΠ· ΡΠΎΠΊΠ΅ΡΠ°. Π§Π°ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² Π²ΠΎΠΎΠ±ΡΠ΅ ΡΠΎΠ²ΠΏΠ°Π΄Π°Π΅Ρ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡΡ ΠΈΡ Ρ Π½Π΅ Π±ΡΠ΄Ρ, Π·Π°ΡΡΠΎΠ½Ρ Π»ΠΈΡΡ ΡΠ°Π·Π»ΠΈΡΠΈΡ.
ΠΠ»Ρ Π·Π°ΠΏΡΡΠΊΠ° ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ 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 ΡΠΎΠ²ΠΏΠ°Π΄Π°Π΅Ρ Ρ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΡΠΌ Π² ΠΊΠ»ΠΈΠ΅Π½ΡΠ΅, Ρ ΡΠΎΠΉ Π»ΠΈΡΡ ΡΠ°Π·Π½ΠΈΡΠ΅ΠΉ, ΡΡΠΎ ΠΎΠ½ ΡΡΠΈΡΡΠ²Π°Π΅Ρ Π΄Π°Π½Π½ΡΠ΅ Ρ ΡΠΎΠΊΠ΅ΡΠ°, Π° Π½Π΅ Ρ ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΡ. ΠΠΎΠ΄ Π² ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ, ΠΊΠ°ΠΊ ΠΈ selector.
Π Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ Π²ΡΠ½Π΅ΡΠ΅Π½Π° Π² ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΉ Π±Π»ΠΎΠΊ ΠΊΠΎΠ΄Π°, Ρ.ΠΊ. Π² ΡΠ°ΠΌΠΊΠ°Ρ
Π΄Π°Π½Π½ΠΎΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΠΎΡΠ»Π΅ ΠΎΠΊΠΎΠ½ΡΠ°Π½ΠΈΡ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ ΡΠ΅ΡΡΡΡΡ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°ΡΡΡΡ ΠΈ ΡΠ½ΠΎΠ²Π° Π·Π°Π½ΠΈΠΌΠ°ΡΡΡΡ Π·Π°Π½ΠΎΠ²ΠΎ β ΠΎΠΏΡΡΡ-ΡΠ°ΠΊΠΈ Ρ ΡΠ΅Π»ΡΡ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ Π·Π°ΡΠΈΡΡ ΠΎΡ ΡΡΠ΅ΡΠΊΠΈ ΠΏΠ°ΠΌΡΡΠΈ.
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());
}
}
Π Π΅Π·ΡΠΌΠΈΡΡΡ:
Π’ΠΎΠ»ΡΠΊΠΎ ΡΡΠΎ ΠΌΡ Π½Π°ΠΏΠΈΡΠ°Π»ΠΈ ΡΠ²ΠΎΡ Π²Π°ΡΠΈΠ°ΡΠΈΡ Π½Π° ΡΠ΅ΠΌΡ ΠΏΡΠΎΡΡΠΎΠ³ΠΎ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π° ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ Π΄Π°Π½Π½ΡΡ ΠΈ ΡΠ°Π·ΠΎΠ±ΡΠ°Π»ΠΈΡΡ Π² ΡΠΎΠΌ, ΠΊΠ°ΠΊ ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠ°Π±ΠΎΡΠ°ΡΡ. Π ΠΏΡΠΈΠ½ΡΠΈΠΏΠ΅, ΠΠΌΠ΅ΡΠΈΠΊΠΈ Ρ ΡΡΡ Π½Π΅ ΠΎΡΠΊΡΡΠ» ΠΈ ΡΠΈΠ»ΡΠ½ΠΎ Π½ΠΎΠ²ΠΎΠ³ΠΎ Π½Π΅ Π½Π°ΠΏΠΈΡΠ°Π», Π½ΠΎ β Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΡΡ ΡΡΠ°ΡΠ΅ΠΉ Π½Π° Π₯Π°Π±ΡΠ΅ Π½Π΅ Π±ΡΠ»ΠΎ, Π° Π² ΡΠ°ΠΌΠΊΠ°Ρ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ ΡΠΈΠΊΠ»Π° ΡΡΠ°ΡΠ΅ΠΉ ΠΎ ΡΡΠΈΠ»ΠΈΡΠ°Ρ cmd Π½Π΅Π»ΡΠ·Ρ Π±ΡΠ»ΠΎ Π΅Π³ΠΎ Π½Π΅ Π·Π°ΡΡΠΎΠ½ΡΡΡ.
Π‘ΡΡΠ»ΠΊΠΈ:
ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com