211 Zalążek przeglądarki Zajmiemy się tym razem inną kwestią, a mianowicie programowaniem sieci. Jest to za- gadnienie bardzo ostatnio popularne. Nasz program będzie miał za zadanie połączyć się z serwerem, którego adres użytkownik będzie podawał jako pierwszy parametr programu, wy- słać zapytanie HTTP i odebrać treść, którą wyśle do nas serwer. Zacznijmy może od tego, że obsługa sieci jest niemal identyczna w różnych systemach operacyjnych. Na przykład między systemami z rodziny Unix oraz Windowsem różnica polega tylko na dołączeniu innych plików nagłówkowych (dla Windowsa — winsock2.h). Przeanalizujmy zatem poniższy kod: #include #include #include #include #include #include #include #include #define MAXRCVLEN 512 #define PORTNUM 80 char *query = "GET / HTTP1.1\n\n"; int main(int argc, char *argv[]) { char buffer[MAXRCVLEN+1]; int len, mysocket; struct sockaddr_in dest; char *host_ip = NULL; if (argc != 2) { printf ("Podaj adres serwera!\n"); exit (1); } host_ip = argv[1]; mysocket = socket(AF_INET, SOCK_STREAM, 0); dest.sin_family = AF_INET; dest.sin_addr.s_addr = inet_addr(host_ip); /* ustawiamy adres hosta */ dest.sin_port = htons (PORTNUM); /* numer portu przechowuje dwubajtowa zmienna - musimy ustalić porządek sieciowy - Big Endian */ memset(&(dest.sin_zero), ’\0’, 8); /* zerowanie reszty struktury */ connect(mysocket, (struct sockaddr *)&dest,sizeof(struct sockaddr)); /* łączymy się z hostem */ write (mysocket, query, strlen(query)); /* wysyłamy zapytanie */ len=read(mysocket, buffer, MAXRCVLEN); /* i pobieramy odpowiedź */ buffer[len]=’\0’; printf("Rcvd: %s",buffer); close(mysocket); /* zamykamy gniazdo */ return EXIT_SUCCESS; }
... zobacz całą notatkę
Komentarze użytkowników (0)