TransferPlikow 35KB 196 2013-03

Transkrypt

TransferPlikow 35KB 196 2013-03
Poniższe przykłady zawierają TYLKO informacje potrzebne do zrealizowania usługi FileTransfer w stopniu
podstawowym. Brak jest odwołań odnośnie interfejsu aplikacji. Do zrealizowania zadania potrzebna jest
wiedza programowania w języku C++ protokołu TCP / IP oraz IO. Do obsługi operacji na plikach należy
włączyć bibliotekę stdio.h
Schemat blokowy aplikacji FileTransfer - serwer
Start + WSAStartup
Dekraracja zmiennych:
sockaddr_in serv, host;
SOCKET ServSock;
int len = sizeof(host);
char buff[1024];
int length;
wyzerować strukturę serv
ustanowić protokół adresowy na IP
wybrać port 121
wyzerować pole sin_addr struktury serv
Utworzyć gniazdo:
funkcja socket (TCP)
Zbindować gniazdo:
funkcja bind
listen
Zamknij gniazdo
Zamknij plik
W tym miejscu należy
utworzyć osobny wątek
accept
Klient rozłączył się
TAK
recvfrom(.?.) ==0
NIE
buff <=> „SEND”
NIE
TAK
Otworzyć plik do zapisu:
funkcja fopen
Błąd
send (?, „SEND”, ?, ?)
wyzerować buff
length = recv(?)
TAK
length ==0
NIE
fwrite(buff, ?, length, ?)
}
Potwierdzenie
gotowości
do transferu
Schemat blokowy aplikacji FileTransfer - klient
Zapytać o adres serwera:
Start + WSAStartup
hostname –> gethostbyname(.?.);
Dekraracja zmiennych:
sockaddr_in host;
SOCKET Sock;
char buff[1024];
int length;
wyzerować strukturę host
ustanowić protokół adresowy na IP
wybrać port 121
do pola sin_addr struktury host przekopiować
4 bajty z hostname->h_addr_list
Utworzyć gniazdo:
funkcja socket (TCP)
connect
W tym miejscu można
utworzyć osobny wątek
Błąd
Otworzyć plik do odczytu:
funkcja fopen
send (?, „SEND”, ?, ?)
Serwer rozłączył się
TAK
recvfrom(.?.) ==0
NIE
NIE
buff <=> „SEND”
}
TAK
wyzerować buff
length = fread(buff, ?, ?, ?)
TAK
length ==0
Zamknij gniazdo
Zamknij plik
NIE
send(?, buff, , ?)
-
Potwierdzenie gotowości
do transferu

Podobne dokumenty