Ne, přes http to neni. Na serveru běží démon co přijmá spojení od klientu a vytváří vlákna pro příjem dat od klientů.
Spojení navazuji pomoci tříd Socket a ServerSocket.
Vysvětlivky:
vstup - DataInputStream
vystup -DataOutputStream
cteni - FileInputStream
zapis - FileOutputStream
klient:
Kód:
byte buffer[] = new byte[velikostBufferu];
int nacteno=0;
long nactenoCelkem=0;
while (nacteno!=-1){
nacteno = cteni.read(buffer,nactenoCelkem,velikostBufferu-nactenoCelkem); //cteni ze souboru
if (nacteno!=-1){
nactenoCelkem+=nacteno;
}
if ((nactenoCelkem+10000>=velikostBufferu) || (nacteno == -1)){
vystup.write(buffer,0,nactenoCelkem);
if (nacteno!=-1){
nacteno = 0;
}else{
vystup.close();
}
nactenoCelkem = 0;
}
}
server
Kód:
while (nacteno!=-1){
nacteno = vstup.read(buffer,nactenoCelkem,velikostBufferu-nactenoCelkem); //cteni dat ze socketu
if (nacteno!=-1){ // pokud byli nacteny data
nactenoCelkem += nacteno;
}
if ((nactenoCelkem+10000>=velikostBufferu) || (nacteno == -1)){ //jestlize je buffer plny(je tam rezerva aby nepretekl) nebo nebyli nacteny data
zapis.write(buffer,0,nactenoCelkem); //zapis do souboru
if (nacteno!=-1){
nacteno = 0;
}
nactenoCelkem = 0;
}
}
takhle to funguje kdyz se zavre ten OutputStream u klienta. Tim vrati metoda read na serveru -1