ืืืืฉื ืืกืืจืช ืืืืืจืื ืืืชืืฉืืช ืืืืงืืฉืช ืืืืืขืืช ืืืชืืืืช ืืืฉืืช ืฉื ืืื ืขืืจ ืืืกืืฃ Windows, ืืื ื ื ืืืืืื ืฉืื ืืืขืช ื-TFTP (ืคืจืืืืงืื ืืขืืจืช ืงืืฆืื ืืจืืืืืืื) - ืคืจืืืืงืื ืคืฉืื ืืืขืืจืช ืงืืฆืื.
ืืื ืืคืขื ืืงืืืืช, ืืืื ื ืขืืืจ ืืงืฆืจื ืขื ืืชืืืืจืื, ื ืจืื ืืช ืืงืื ืฉืืืืฉื ืคืื ืงืฆืืื ืืืืช ืืืื ืืื ืื ืืจืฉืช, ืื ื ืชื ืืืชื. ืคืจืืื ื ืืกืคืื - ืืชืืช ืืืืจื
ืื ื ืื ืืขืชืืง-ืืืืง ืืืืข ืืคื ืืืช, ืฉืืืืคื ืืกืืจืชื ื ืืชื ืืืฆืื ืงืืฉืืจืื ืืืื ืืกืืฃ ืืืืืจ, ืื ื ืจืง ืืืื ืฉืืืกืืกื, 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());
}
}
ืืืจืจ ืืื ืคืื ืงืฆืื ืืงืืืขืช ืืช ืคืขืืืืช ืืชืืื ืืช ืืืชืื ืืืืจืืืช ืฉืืืื ื. ืืื ืืื ืื ืืืื ืืคื ืืืืจืืง ืฉืื ืืฉืชืืฉืื ืืื ืื ืืืื ืืืืชืจ ืขื ืืฆืืื ืืืืืฆืช ืืืืฅ ืืืืืง ืืงืื, ืืื ืืกืืื ืืขืืงืจืืช ืืื ืืื ืืืขืืจ ืื'ืืืื ืฉื ืืืจืื ืืกืืืืื, ืืื ื ืฆืืืื ื-C#, ืืฆืืืขื ืคืื ืงืฆืืืช ื-C++ ืื ื- ืืคืืืช ืืืื ืื ืืจื ืืื ืืจื, ืฉืืืคืฉืจืื ืื ืืืืฉื ืืช ืื ืืฆืืจื ืืคื. ืื ืืชื ืืืืข ืืื ืืืคืื ืืช ืืงืื ืืงืฆืช ืืืชืจ ืืืื ืื, ืืฉืื ืืืืงืืจืช ืืชืืืืืช. ื ืจืื ืื ืฉืฆืจืื ืืื ืืืืื ืืืจืืืช, ืืื ืืื ื ืฆืื...
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();
}
}
ืฉืืืช 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