Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //./client mech.math.msu.su http://mech.math.msu.su/~vvb/1course/index.html
- #include <stdio.h>
- #include <iostream>
- #include <string.h>
- #include <string>
- #include <stdlib.h>
- #include <unistd.h>
- #include <sys/socket.h>
- #include <netinet/in.h>
- #include <netdb.h>
- using namespace std;
- int main(int argc, char* argv[]) {
- if(argc<3)
- return 1;
- string peerHost = argv[1]; // = "mech.math.msu.su";
- string url = argv[2]; //= "http://mech.math.msu.su/~vvb/1course/index.html";
- int peerPort = 80;
- //cin>>peerHost;
- //cin>>url;
- //cin>>peerPort;
- int s0 = socket(AF_INET, SOCK_STREAM, 0);
- struct hostent *host = gethostbyname(peerHost.c_str());
- if (host == NULL) {
- perror("Cannot define host address"); exit(1);
- }
- struct sockaddr_in peeraddr;
- memset(&peeraddr, 0, sizeof(peeraddr));
- peeraddr.sin_family = AF_INET;
- peeraddr.sin_port = htons(peerPort);
- memmove(&(peeraddr.sin_addr.s_addr), host->h_addr_list[0], 4);
- printf(
- "peer addr = %d.%d.%d.%d, port %d\n",
- host->h_addr_list[0][0] & 0xff,
- host->h_addr_list[0][1] & 0xff,
- host->h_addr_list[0][2] & 0xff,
- host->h_addr_list[0][3] & 0xff,
- (int) peerPort
- );
- int res = connect(s0,(struct sockaddr*) &peeraddr, sizeof(peeraddr));
- if (res < 0) {
- perror("Cannot connect!"); exit(1);
- }
- printf("Connected. Reading a server message.\n");
- string s = "GET " + url + " HTTP/1.1 \r\nHost: " + peerHost +
- "\r\n\r\n";
- write(s0, s.c_str(), strlen(s.c_str()));
- FILE * pFile = fopen ( "file.html" , "w+" );
- char buffer[1];
- bool flag = false;
- // char prev;
- while (read(s0,buffer,1) > 0) {
- printf("%s", buffer);
- //if(buffer[0]=='\n'&&prev=='\n'||buffer[0]=='\r'&&prev=='\n'||buffer[0]=='\n'&&prev=='\r'||buffer[0]=='\r'&&prev=='\r')
- if(buffer[0]=='<') flag = true;
- if(flag)
- fwrite(buffer , 1, sizeof(buffer) , pFile);
- //prev = buffer[0];
- }
- close(s0);
- fclose (pFile);
- return 0;
- }
Add Comment
Please, Sign In to add comment