Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[CURL/WinSock] Prosty serwer udostępniajacy pliki

Ostatnio zmodyfikowano 2012-04-02 21:30
Autor Wiadomość
Chlorek
Temat założony przez niniejszego użytkownika
[CURL/WinSock] Prosty serwer udostępniajacy pliki
» 2012-03-31 22:16:08
Witam, potrzebuję napisać prosty serwer udostępniający plik. Nie wiem za bardzo jak to zrobić i jaką biblioteką, zastanawiam się nad curl i WinSock'iem, z jednej strony curl jest podobno wręcz stworzony do takich rzeczy (jednak sam nie znalazłem, żadnego przykładowego kodu w sieci), z drugiej strony WinSock chyba też dałby radę, tylko nie wiem za bardzo jak to w nim napisać (znam podstawy), bo chyba wysyłanie megabajtowych pakietów danych nie jest dobre. Mam też pomysł taki, aby serwer ciął sobie plik na części (odpowiednio małe) i wysyłał je jeden po drugim jako pakiety, ale istnieje podobno ryzyku nie dotarcia całości do klienta. Proszę doradźcie czego użyć i mniej więcej jak to można napisać.
P-53624
malan
» 2012-03-31 22:48:51
Aplikacja, która pozwoli na udostępnianie plików w internecie. Przykładowo - z komputera X łączę się z (np.) moim domowym komputerem, na którym działa Twoja aplikacja i za pomocą odpowiednich zapytań pobieram dany plik, tak? Problem bardzo interesujący. Jeżeli chodzi o wykonanie to polecałbym zagłębić się w Winsock, gdyż, nie jestem pewny, ale myślę, że cURL nie sprawdziłby się w tej sytuacji.
P-53628
Chlorek
Temat założony przez niniejszego użytkownika
» 2012-03-31 23:13:14
Tak też pewnie zrobię, myślę żeby zrobić to trochę jak HTTP, polecenie "GET TU_PLIK" - serwer zaczyna wykonywać jakieś potrzebne operacje i nadsyła klientowi dane, klient łapie je i zapisuje. Różnicą jednak w porównaniu do innych tego typu serwerów ma być to, że ma on dać pełną swobodę przeglądania plików. Z siecią jestem jeszcze średnio obeznany, więc mój plan jest średnio dobry jednak, mam w zamiarze zrobić coś następującego:
1. Serwer jest uruchamiany - wysyła IP komputera na, którym jest uruchomiony do skryptu PHP, który zapisuje go w pliku na pewnym serwerze
2. Klient sprawdza, czy pojawiło się jakieś IP, jeśli tak to pobiera je, i wydaje rozkaz innemu skryptowi PHP usunięcie pliku
3. Klient dzwoni pod otrzymane IP wysyłając pakiet kontrolny "check"
4. Jeśli serwer odpowie mu tym samym to znaczy, że połączono, jeśli nie to klient ponawia próbę
5. Serwer oczekuje na polecenie od połączonego klienta
6. Klient wysyła informacje (trochę typu FTP), np. "cd C:\test\", czy też "get c:\plik.exe".
7. Serwer wykonuje polecenie

Co do punktu 1 i 2, musi tak być gdyż posiadam zmienne IP, a zawsze muszę znać najnowsze IP serwera, by móc się z nim połączyć. Kroki 1 i 2 będą wykonywane przez Curl (wygodnie i szybko), i praktycznie są już gotowe.
I jeszcze mam pytanie, jak rozpoznać z jakiego IP nadszedł pakiet? Gdy nasłuchuję jakiś port nie widzę możliwości sprawdzenia od kogo on przyszedł (winsock).
P-53631
DejaVu
» 2012-03-31 23:57:04
Otwierasz gniazdo na TCP i wysyłasz bajty. Po drugiej stronie je odbierasz, zapisujesz i po zabawie. Jeżeli masz odpowiednie API do połączenia się dwóch klientów i wysyłania/odbierania danych to roboty jest może na 15min :) W czystym WinAPI realizacja czegoś takiego nie powinna zabrać więcej jak 2h wiedząc czego i jak trzeba użyć oraz doczytując jeszcze pierdoły w dokumentacji :)
P-53633
Chlorek
Temat założony przez niniejszego użytkownika
» 2012-04-02 21:18:10
Ta, w teorii wszystko wygląda kolorowo, po drodze jeszcze niby proste błędy, których istnienia nie można zrozumieć, nagle samo zaczyna wszystko działać etc. I tak w 2 godzin robią się 2 dni... Uroki programowania, mam już niby swój serwer i klienta, jednak po odebraniu pliku z plik 4MB (na wejściu) mam 3.8MB (na wyjściu). Coś albo źle czytam i zapisuję (w co wątpię) albo coś nie wyłapuję, moje zdolności w WinSock'etach są raczej na poziomie 20%. Kodu na razie nie będę wklejał (bo się zrobiło w ch... i ciut ciut kodu). Jak będę miał z czymś bardziej konkretnym problem to napiszę.
P-53747
DejaVu
» 2012-04-02 21:30:53
Albo nie potrafisz zapisać pliku binarnie :P
P-53748
« 1 »
  Strona 1 z 1