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