Ke hoʻomau nei i ka hoʻomau ʻana o nā ʻatikala i hoʻolaʻa ʻia i ka hoʻokō maʻamau o nā hāmeʻa console Windows, ʻaʻole hiki iā mākou ke hoʻopā i ka TFTP (Trivial File Transfer Protocol) - kahi protocol transfer file maʻalahi.
E like me ka manawa hope loa, e hele pōkole kākou ma luna o ke kumumanaʻo, e ʻike i ke code e hoʻokō ana i nā hana like me ka mea i koi ʻia, a hoʻopaʻa ʻia. Nā kikoʻī hou aku - ma lalo o ka ʻoki
ʻAʻole au e kope kope i ka ʻike kuhikuhi, nā loulou i hiki ke ʻike maʻamau ma ka hope o ka ʻatikala, e ʻōlelo wale wau ma kāna kumu, ʻo TFTP kahi hoʻololi maʻalahi o ka protocol FTP, kahi i loaʻa ai ka hoʻonohonoho mana hoʻonohonoho. ua wehe ʻia, a ʻoiaʻiʻo, ʻaʻohe mea ma aneʻi koe wale nō nā kauoha no ka loaʻa ʻana a me ka hoʻoili ʻana i kahi faila . Eia naʻe, i mea e hoʻonui iki ai i kā mākou hoʻokō ʻana a hoʻololi ʻia i nā loina o kēia manawa o ke kākau ʻana i nā code, ua hoʻololi iki ʻia ka syntax - ʻaʻole kēia e hoʻololi i nā loina o ka hana, akā ʻo ka interface, IMHO, e lilo i mea kūpono a hoʻohui i nā mea maikaʻi o FTP a me TFTP.
ʻO ka mea nui, i ka wā i hoʻokuʻu ʻia, noi ka mea kūʻai aku i ka IP address o ka server a me ke awa kahi i wehe ʻia ai ka TFTP maʻamau (ma muli o ke kūlike ʻole me ka protocol maʻamau, manaʻo wau he kūpono ia e waiho i ka mea hoʻohana i ka hiki ke koho i kahi awa), a laila a hiki mai ka pilina, ma muli o ka hiki i ka mea kūʻai ke hoʻouna i kekahi o nā kauoha - e kiʻi a waiho paha, e loaʻa a hoʻouna paha i kahi faila i ke kikowaena. Hoʻouna ʻia nā faila a pau ma ke ʻano binary e hoʻomaʻamaʻa i ka loiloi.
No ka hoʻokō ʻana i ka protocol, ua hoʻohana au i nā papa 4:
- TFTPClient
- TFTPServer
- TFTPClientTester
- TFTPServerTester
Ma muli o ka loaʻa ʻana o nā papa hoʻāʻo no ka hoʻopau ʻana i nā mea nui, ʻaʻole wau e loiloi iā lākou, akā aia ke code i loko o ka waihona; hiki ke loaʻa kahi loulou i ka hopena o ka ʻatikala. I kēia manawa e nānā au i nā papa nui.
TFTPClient
ʻO ka hana o kēia papa e hoʻopili i kahi kikowaena mamao ma kāna ip a me ka helu port, heluhelu i kahi kauoha mai ke kahawai hoʻokomo (ma kēia hihia, ʻo ka papa keyboard), e hoʻololi iā ia, e hoʻololi iā ia i ke kikowaena, a, e hilinaʻi ana inā ʻoe. pono e hoʻouna a loaʻa paha i kahi faila, hoʻoili a loaʻa paha.
ʻO ke code no ka hoʻokuʻu ʻana i ka mea kūʻai aku e hoʻopili i ke kikowaena a kali i kahi kauoha mai ke kahawai hoʻokomo e like me kēia. Ua wehewehe ʻia kekahi mau ʻano hoʻololi honua i hoʻohana ʻia ma waho o ka ʻatikala, i ka kikokikona piha o ka papahana. Ma muli o ko lākou mea liʻiliʻi, ʻaʻole wau e haʻi iā lākou i ʻole e hoʻonui i ka ʻatikala.
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());
}
}
E hele kāua i nā ʻano i kapa ʻia ma kēia poloka code:
Hoʻouna ʻia ka faila - me ka hoʻohana ʻana i kahi scanner, hōʻike mākou i nā ʻike o ka faila ma ke ʻano he nui o nā bytes, a mākou e kākau ai i kēlā me kēia i ke kumu, a laila pani mākou a wehe hou (ʻaʻole ka hopena maopopo loa, akā. hōʻoiaʻiʻo ia i ka hoʻokuʻu ʻana i nā kumuwaiwai), a laila hōʻike mākou i kahi leka e pili ana i ka hoʻoili kūleʻa.
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());
}
}
Hōʻike kēia ʻāpana code i ka lawe ʻana i ka ʻikepili mai ke kikowaena. He mea liʻiliʻi hou nā mea a pau, ʻo ka poloka mua wale nō o ke code. I mea e maopopo pono ai i ka nui o nā bytes e pono ke heluhelu ʻia mai ke kumu, pono ʻoe e ʻike i ka nui o ke kaumaha o ka faila i hoʻoili ʻia. Hōʻike ʻia ka nui o ka faila ma ke kikowaena ma ke ʻano he integer lōʻihi, no laila ua ʻae ʻia ʻo 4 bytes ma ʻaneʻi, a laila hoʻololi ʻia i hoʻokahi helu. ʻAʻole kēia he ala Java loa, ua like ia me ka SI, akā hoʻoponopono ia i kona pilikia.
A laila he mea liʻiliʻi nā mea āpau - loaʻa iā mākou kahi helu o nā bytes i ʻike ʻia mai ke kumu a kākau iā lākou i kahi faila, a laila hōʻike mākou i kahi leka kūleʻa.
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());
}
}
Inā hoʻokomo ʻia kahi kauoha ʻē aʻe ma mua o ka loaʻa a hoʻokomo ʻia i loko o ka pukaaniani o ka mea kūʻai aku, e kāhea ʻia ka hana showErrorMessage, e hōʻike ana ua hewa ka hoʻokomo. Ma muli o ka liʻiliʻi, ʻaʻole wau e haʻi. ʻOi aku ka hoihoi i ka hana o ka loaʻa ʻana a me ka hoʻokaʻawale ʻana i ke kaula hoʻokomo. Hoʻokomo mākou i ka scanner i loko, kahi a mākou e manaʻo ai e loaʻa kahi laina i hoʻokaʻawale ʻia e ʻelua mau hakahaka a loaʻa ke kauoha, ka helu kumu a me ka helu wahi.
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");
}
}
Ka hoʻouna ʻana i kahi kauoha—e hoʻouna i ke kauoha i hoʻokomo ʻia mai ka scanner i ke kumu a koi ʻia e hoʻouna ʻia
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 kahi mea koho he hana e hoʻoholo ai i nā hana o ka papahana ma muli o ke kaula i hoʻokomo ʻia. ʻAʻole nani loa nā mea a pau a ʻo ka hoʻopunipuni i hoʻohana ʻia ʻaʻole ia ka mea maikaʻi loa me ka puka ʻana ma waho o ka poloka code, akā ʻo ke kumu nui o kēia ka nele i Java o kekahi mau mea, e like me nā ʻelele ma C #, nā kuhikuhi hana mai C++, a i ʻole. ka liʻiliʻi o ka goto weliweli a me ka weliweli, e ʻae iā ʻoe e hoʻokō i kēia nani. Inā ʻike ʻoe pehea e hoʻonui iki ai i ke code, mahalo wau i ka hoʻohewa ʻana ma nā ʻōlelo. Me he mea lā iaʻu e pono ai kahi puke wehewehe ʻōlelo String-delegate ma ʻaneʻi, akā ʻaʻohe ʻelele...
private void selector()
{
do{
if (typeOfCommand.equals("get")){
get(sourcePath, destPath);
break;
}
if (typeOfCommand.equals("put")){
put(sourcePath, destPath);
break;
}
showErrorMessage();
}
while (false);
}
}
TFTPServer
ʻOkoʻa ka hana o ka kikowaena mai ka hana o ka mea kūʻai aku, ma ka nui, aia wale nō nā kauoha i hele mai iā ia ʻaʻole mai ka papa keyboard, akā mai ke kumu. ʻO kekahi o nā ʻano hana like ʻole, no laila ʻaʻole wau e haʻi iā lākou, e hoʻopā wale wau i nā ʻokoʻa.
No ka hoʻomaka ʻana, hoʻohana ʻia ke ʻano holo, kahi e loaʻa ai kahi awa ma ke ʻano he hoʻokomo a hana i ka ʻikepili hoʻokomo mai ke kumu i loko o kahi loop mau loa.
public void run(int port) {
this.port = port;
incialization();
while (true) {
getAndParseInput();
selector();
}
}
ʻO ke ala hoʻokomo, e hoʻopili ana i ke ʻano writeToFileFromSocket e wehe i kahi kahawai kākau i kahi faila a kākau i nā byte komo a pau mai ke kumu, e hōʻike ana i kahi memo e hōʻike ana i ka hoʻokō kūleʻa o ka hoʻoili ʻana ke pau ke kākau ʻana.
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());
}
}
Hoʻihoʻi ke ala kiʻi i ka faila kikowaena. E like me ka mea i ʻōlelo ʻia ma ka ʻāpana ma ka ʻaoʻao o ka mea kūʻai aku o ka papahana, no ka hoʻoili kūleʻa ʻana i kahi faila pono ʻoe e ʻike i kona nui, mālama ʻia i loko o kahi integer lōʻihi, no laila ua hoʻokaʻawale wau iā ia i kahi ʻano o 4 bytes, e hoʻololi iā lākou byte-by-byte i ke kumu, a laila, i ka loaʻa ʻana a hōʻuluʻulu iā lākou ma ka mea kūʻai aku i kahi helu hoʻi, hoʻololi wau i nā bytes a pau i hana i ka faila, heluhelu mai ke kahawai komo mai ka 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());
}
};
Ua like ke ala getAndParseInput me ka mea kūʻai aku, ʻo ka ʻokoʻa wale nō ka heluhelu ʻana i ka ʻikepili mai ke kumu ma mua o ka papa keyboard. Aia ke code i loko o ka waihona, e like me ka mea koho.
I kēia hihia, hoʻokomo ʻia ka hoʻomaka ʻana i kahi poloka o ke code, no ka mea i loko o kēia hoʻokō ʻana, ma hope o ka pau ʻana o ka hoʻoili ʻana, hoʻokuʻu ʻia nā kumuwaiwai a hoʻopaʻa hou ʻia - e hāʻawi hou i ka pale mai nā leaka hoʻomanaʻo.
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());
}
}
E hōʻuluʻulu:
Ua kākau wale mākou i kā mākou hoʻololi ʻana i kahi protocol transfer data maʻalahi a noʻonoʻo pehea e hana ai. Ma ke kumu, ʻaʻole au i ʻike iā ʻAmelika ma aneʻi a ʻaʻole i kākau nui i nā mea hou, akā ʻaʻohe ʻatikala like ʻole ma Habré, a ma ke ʻano he ʻāpana o ka kākau ʻana i nā ʻatikala e pili ana i ka cmd utilities hiki ʻole ke hoʻopā aku iā ia.
Nā Manaʻo:
Source: www.habr.com