ααααααααααααΈα’αααααααααααα»ααααααααα§αααα·ααααααΆαα’αα»ααααααααΆαααααα½αααα§αααααααααΎααααΆαααα»αααΌα Windows ααΎααα·αα’αΆα αα½αααΆααααα ααΈαααααΎ TFTP (Trivial File Transfer Protocol) αααααΆαα·ααΈααΆααααααα―αααΆαααΆααααα
ααΌα
ααΎααα»α ααΌααα·ααΆααααααααααα’αααΈααααΉααααΈ ααΌαααΎαααΌααααα’αα»αααααα»αααΆαααααααααααΆαα
ααΉααααααΌαααΆααα½α α αΎααα·ααΆαααΆα ααααααΆααααα’α·ααααααα - αα
αααααααΆαααΆαα
αααα»αααΉααα·αα αααα-αα·αααααΆααααααααΆαααααα αααααααΆαααααααΆααααααΆα’αΆα ααααΌαααΆαααααΎααα α α»ααααα ααααα’αααααααα αααα»αααΉααα·ααΆαααΆ TFTP ααΊααΆαααααααα½αααααΆαααααααα·ααΈααΆα FTP ααααααα»ααααααΆααααααααΆααααααααααααΆαα αΌαααααΎα ααααΌαβααΆαβααβα αα α αΎαβααΆαβαα·αβααααΆαβα’αααΈβαα βααΈβαααβαα ααΎαβαααβααβααΆαααβαααααΆβαααααΆααβααα½α αα·αβαααααβα―αααΆαα ααααααΆαααΆααααα ααΎααααΈααααΎα±ααααΆαα’αα»ααααααααααΎαααΆαααΆαααΎαααΆαααααα·α αα·ααααααααΆααααααΆααααα αα α»ααααααααααΆααααααααΌα ααΆαααααααααααααααΌαααΆαααααΆααααααΌαααααα·α ααααα½α - ααααα·αααααΆααααααΌααααααΆαααααααα·ααααα·ααΆααα ααα»ααααα ααα»α αααααΆαα IMHO ααααΆαααΆα‘αΌααΈααααααα·α α αΎα αα½ααααα αΌαααααΆααΌααα·αααααΆααα·αααααΆααα FTP αα·α TFTP α
ααΆαα·ααα αα αααααΎαααααΎαααΆα α’αα·αα·ααααααΎαα»αα’αΆααααααΆα IP αααααααΆαααΈααα αα·αα αααααα TFTP ααααΆαααααα½αααααΌαααΆαααΎα (αααααΆαααααΆααα·ααααΈααααΆααΆαα½αααΉααα·ααΈααΆααααααααΆα αααα»αααΆαα αΆαααα»αααΆααΆαααααααααα»αααΆααα»αα±ααα’αααααααΎααααΆααααΆαααααααΆαααααΎαααΎαα ααα) αααααΆααααΈααα ααΆααααααΆααααΎαα‘αΎα αααααΆααααααααααααΆαααΈααααααα’αΆα ααααΎααΆααααααααΆαα½α - ααα½α α¬ααΆαα ααΎααααΈααα½α α¬ααααΎα―αααΆααα αααΆαααΈαααα α―αααΆαααΆααα’ααααααΌαααΆαααααΎαααα»ααααααααααΈα ααΎααααΈααααα½ααααααα·ααααΆα
ααΎααααΈα’αα»αααααα·ααΈααΆα αααα»αααΆαααααΎ 4 classes ααΆαααααααΈα
- TTPClient
- αααΆαααΈααα TFTPS
- TTPClientTester
- TFTPServerTester
αααααΆαααααΆααα·ααααααΆααααΆααααΆαααααααΆααααααΆααααααααΆααααα α»ααααααααΆααααααααα»αααΉααα·ααα·ααΆααα½αααααααα»ααααααΌαααΉααα αααα»αααααΆααααααΆαααα ααΆα’αΆα ααααΆααα α α»ααααα ααααα’αααααα α₯α‘αΌαααααααα»αααΉαααΎαααααΆααααααΆαααα
TTPClient
ααΆααα·α αα ααααααΆαααααααΊααΎααααΈααααΆαααα αααΆαααΈαααααΈα ααααΆααααααααΎ 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());
}
}
ααααα·αααΎααΆααααααααΆαααα ααΈααα½α α¬ααΆααααααΌαααΆααααα αΌααα αααα»ααααα’α½α αααΆαααΈαααααα αα»αααΆα 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 ααααΏααα½αα ααα½αααΌα ααΆ delegates αα αααα»α 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
αα»αααΆααααααααΆαααΈααααα»αααααΆααΈαα»αααΆααααααααΆαααΈααααααααα αα·ααα ααΆααααα αααα»αααΆααααααααΆαααααααΆαα·ααααααααΈααααΆαα α»α αα ααα»ααααααααΈααααα αα·ααΈααΆααααααα½αα ααα½αααΆααΌαα ααΌα ααααΆ ααΌα αααααααα»αααΉααα·αααΎαα‘αΎααα αααα»αααΉααααααααΎααΆααα»αααααΆααα»αααααα
ααΎααααΈα αΆααααααΎα αα·ααΈααΆαααααααααΎαααΆαααααΌαααΆαααααΎ αααααα½αα αααααΆααΆααααα αΌα αα·αααααΎαααΆααα·αααααααααα αΌαααΈαααααα αααα»αααααα·ααα»αα’ααααααααΆαα·α αα α
public void run(int port) {
this.port = port;
incialization();
while (true) {
getAndParseInput();
selector();
}
}
αα·ααΈααΆαααααααΆαα ααααα»ααα·ααΈααΆααααα writeToFileFromSocket αααααΎαααΆαααααααα α―αααΆααα½α α αΎαααααααααααα αΌαααΆααα’ααααΈ socket αααα αΆαααΆαααααααα αΆαααΈααΆααααα ααααΆααααααααααααααα αα ααααααααΆααααααααΆααααα ααα
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());
}
}
αααααα:
ααΎαααΎαααααΆαααααααααααααα½αααααΆαααααα½αααααααΎαααΎαα·ααΈααΆαααααααα·ααααααααΆαααα α αΎαααααααααααΈαααααααααΆαα½αααααααΎαααΆαα ααΆαααααΆααα αααα»ααα·αααΆαααααΎαα’αΆαααα·α αα ααΈααα α αΎααα·αααΆααααααααΏαααααΈα αααΎααα ααα»αααααα·αααΆαα’αααααααααααααααΆαα ααΎ Habre α αΎαααΆααααααα½αααααΆααααααα’αααααααΆαααααααααΆααα’αααΈα§αααααααααΎααααΆαα cmd ααΆαα·αα’αΆα αα αα½α ααααααα·ααααααΆααααΆα
α―αααΆαααα:
ααααα: www.habr.com