O le fa'aauauina pea o fa'asologa o tala fa'atatau i fa'atinoga fa'aleaganu'u o fa'aoga fa'amafanafanaga a Windows, e le mafai ona matou fesoasoani ae pa'i atu i luga o le TFTP (Trivial File Transfer Protocol) - o se fa'asologa faigofie o faila faila.
E pei o le taimi mulimuli, seʻi o tatou faʻapuupuu le aʻoaʻoga, vaʻai i le faʻailoga e faʻatinoina galuega tutusa ma le manaʻomia, ma iloilo. Fa'amatalaga atili - i lalo o le tipi
O le a ou le kopiina faʻamatalaga faʻamatalaga, o fesoʻotaʻiga e masani ona maua i le pito o le tusiga, o le a naʻo le mea autu, o le TFTP o se fesuiaiga faigofie o le FTP protocol, lea e iai le faʻatonuga o le avanoa. ua aveesea, ma o le mea moni e leai se mea iinei vagana ai poloaiga mo le mauaina ma le fesiitaiga o se faila . Ae ui i lea, ina ia mafai ona sili atu le matagofie o la tatou faʻatinoga ma faʻafetaui i mataupu faavae o loʻo i ai nei o le tusitusi code, o le syntax ua suia teisi - e le suia ai mataupu faavae o le gaioiga, ae o le atinaʻe, IMHO, ua sili atu ona talafeagai ma tu'ufa'atasia itu lelei o le FTP ma le TFTP.
Aemaise lava, pe a faʻalauiloa, e talosagaina e le kalani le tuatusi IP a le server ma le taulaga lea e tatala ai le TFTP masani (ona o le le ogatasi ma le faʻasologa masani, na ou manatu e talafeagai le tuʻuina atu i le tagata faʻaoga le tomai e filifili ai se uafu), a maeʻa a fesoʻotaʻiga e tupu, o se taunuuga e mafai ai e le kalani ona tuʻuina atu se tasi o poloaiga - maua pe tuʻu, e maua pe lafo se faila i le server. O faila uma e lafo i le binary mode e faafaigofie ai le manatu.
Ina ia faʻatinoina le faʻasalalauga, sa masani ona ou faʻaaogaina vasega 4:
- TFTPClient
- TFTPSserver
- TFTPClientTester
- TFTPServerTester
Ona o le mea moni o vasega suʻega e naʻo le faʻaaogaina o mea autu, o le a ou le suʻeina, ae o le code o le a i totonu o le fale teu oloa e mafai ona maua i le pito o le tusiga; O lenei o le a ou tilotilo i vasega autu.
TFTPClient
O le galuega a lenei vasega o le faʻafesoʻotaʻi i se server mamao e faʻaaoga ai lona ip ma le numera o le taulaga, faitau se faʻatonuga mai le faʻaogaina o le vaitafe (i lenei tulaga, le piano), faʻapipiʻi, faʻafeiloaʻi i le server, ma, faʻalagolago pe e te mana'omia e lafo pe maua se faila, fa'aliliu pe maua.
O le code mo le tatalaina o le kalani e faʻafesoʻotaʻi i le 'auʻaunaga ma faʻatali mo se faʻatonuga mai le faʻaogaina o le vaitafe e pei o lenei. O le tele o fesuiaiga o le lalolagi o loʻo faʻaaogaina iinei o loʻo faʻamatalaina i fafo atu o le tusiga, i le anotusi atoa o le polokalame. Ona o lo latou fa'atauva'a, ou te le ta'ua i latou ina ia aua ne'i ova le tala.
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());
}
}
Sei o tatou agai i luga o metotia ua taʻua i lenei poloka o code:
O iinei o loʻo tuʻuina atu ai le faila - e faʻaaoga ai se scanner, matou te tuʻuina atu mea o loʻo i totonu o le faila o se faʻasologa o bytes, lea matou te tusia taʻitasi i le socket, ona matou tapunia lea ma toe tatala (e le o le fofo sili ona manino, ae e faʻamaonia le tuʻuina atu o punaoa), a maeʻa ona matou faʻaalia se feʻau e uiga i le fesiitaiga manuia.
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());
}
}
O lenei vaega fa'ailoga o lo'o fa'amatalaina le toe maua mai o fa'amatalaga mai le server. O mea uma ua toe faʻatauvaʻa, naʻo le poloka muamua o code e fiafia. Ina ia malamalama lelei pe fia le tele o bytes e manaʻomia ona faitau mai le socket, e tatau ona e iloa le mamafa o le faila faila. O le faila faila i luga o le 'auʻaunaga o loʻo faʻatusalia o se numera umi, o lea e talia ai 4 bytes iinei, lea e mulimuli ane liua i se numera tasi. E le o se faiga Java tele lea, e foliga tutusa mo le SI, ae foia lona faafitauli.
Ona leai lea o mea uma - matou te mauaina se numera iloa o bytes mai le socket ma tusi i latou i se faila, ona matou faʻaalia lea o se feʻau manuia.
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());
}
}
Afai o se poloaiga e ese mai i le mauaina poʻo le tuʻuina na tuʻuina i totonu o le faamalama o le kalani, o le showErrorMessage galuega o le a valaʻau, e faʻaalia ai e le saʻo le faʻaoga. Ona o le le taua, ou te le ta'ua. E sili atu le manaia o le galuega o le mauaina ma le vaeluaina o le manoa ulufale. Matou te pasi atu le scanner i totonu, lea matou te faʻamoemoe e maua ai se laina e vaelua avanoa e lua ma o loʻo i ai le faʻatonuga, tuatusi faʻapogai ma tuatusi nofoaga.
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");
}
}
Tuuina atu o se poloaiga—e auina atu le poloaiga na tuu mai i le sikola i le socket ma faamalosia e auina atu
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());
}
}
O le tagata filifilia o se galuega e fuafua ai gaioiga a le polokalame e fa'atatau i le manoa na tu'uina. O mea uma iinei e le matagofie tele ma o le togafiti e faʻaaogaina e le o se mea e sili ona lelei ma faʻamalosi e alu ese i fafo atu o le poloka poloka, ae o le mafuaaga autu o lenei mea o le toesea i Java o nisi mea, e pei o sui i C #, faʻailoga galuega mai C ++, poʻo i. sili ona leaga ma le mataʻutia goto, lea e mafai ai ona e faʻatinoina lenei mea matagofie. Afai e te iloa pe faʻafefea ona fai le faʻailoga e sili atu le matagofie, ou te faʻafeiloaʻi faitioga i faʻamatalaga. E foliga mai ia te aʻu e manaʻomia se lomifefiloi String-delegate iinei, ae e leai se sui ...
private void selector()
{
do{
if (typeOfCommand.equals("get")){
get(sourcePath, destPath);
break;
}
if (typeOfCommand.equals("put")){
put(sourcePath, destPath);
break;
}
showErrorMessage();
}
while (false);
}
}
TFTPSserver
O le faʻatinoga o le 'auʻaunaga e ese mai le faʻatinoga a le kalani, i le lautele, naʻo na o poloaiga e sau i ai e le mai le piano, ae mai le socket. O nisi o metotia e masani lava ona tutusa, o lea o le a ou le taʻua ai, o le a ou paʻi atu i eseesega.
Ina ia amata, e faʻaaogaina le auala taʻavale, lea e maua ai se taulaga e fai ma faʻaoga ma faʻagasolo faʻamatalaga faʻapipiʻi mai le socket i se matasele e faʻavavau.
public void run(int port) {
this.port = port;
incialization();
while (true) {
getAndParseInput();
selector();
}
}
O le auala tu'u, lea e afifi ai le writeToFileFromSocket method e tatala ai se tafega tusitusi i se faila ma tusi uma mea e sao mai i le socket, e fa'aalia ai se fe'au e fa'ailoa ai le fa'amae'a manuia o le fesiitaiga pe a mae'a le tusi.
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());
}
}
O le auala e maua ai le faila faila. E pei ona uma ona taʻua i le vaega i le itu o le tagata o tausia o le polokalame, ina ia manuia le fesiitaiga o se faila e tatau ona e iloa lona tele, teuina i se numera umi, o lea na ou vaevaeina ai i se laina o 4 bytes, faʻafeiloaʻi i latou byte-by-byte i le socket, ona maua lea ma faʻapipiʻi i luga o le kalani i se numera i tua, ou te faʻafeiloaʻi uma bytes e fai ai le faila, faitau mai le vaitafe faʻapipiʻi mai le faila.
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());
}
};
Ole auala getAndParseInput e tutusa ma le tagata o tausia, pau le eseesega o le faitau faʻamatalaga mai le socket nai lo le piano. O le code o loʻo i totonu o le fale teu oloa, pei o le tagata filifilia.
I lenei tulaga, o le amataga o loʻo tuʻuina i se isi poloka o le code, aua i totonu o lenei faʻatinoga, pe a maeʻa le fesiitaiga, e faʻasaʻoloto punaoa ma toe nofoia - toe tuʻuina atu le puipuiga mai le faʻaogaina o mafaufauga.
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());
}
}
I se aotelega:
Faatoa matou tusia a matou lava fesuiaiga i luga o se faʻamatalaga faigofie faʻafeiloaʻi ma mafaufau pe faʻafefea ona aoga. I le mataupu faavae, ou te leʻi mauaina Amerika iinei ma e leʻi tusia ni mea fou, ae e leai ni tala tutusa i luga o Habré, ma o se vaega o le tusiaina o se faasologa o tala e uiga i le cmd utilities e le mafai ona paʻi i ai.
Faʻamatalaga:
puna: www.habr.com