#include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <sys/socket.h> #include <netdb.h> #include <sys/param.h> #include <sys/uio.h> #include <unistd.h> #include <netinet/in.h> #include <string.h> #define BUFFSIZE 256 #define SERVICE_NAME "http" #define PROTOCOL "tcp" int Connect(char *dom, char *path) { char send_buf[BUFFSIZE]; int socketnum; struct hostent *hos; struct sockaddr_in sin; struct servent *serv; hos = gethostbyname(dom); if( hos == NULL ) { fprintf(stderr, "IPアドレスへの変換に失敗"); return 0; } memset(&sin, 0, sizeof(sin)); sin.sin_family = AF_INET; memcpy(&sin.sin_addr, hos->h_addr, hos->h_length); serv = getservbyname(SERVICE_NAME, PROTOCOL); if(serv != NULL) { sin.sin_port = serv->s_port; } if( ( socketnum = socket(AF_INET, SOCK_STREAM, 0)) < 0) { fprintf(stderr, "ソケットの生成に失敗しました\n"); return 1; } if( connect(socketnum, (struct sockaddr *)&sin, sizeof(sin)) == -1) { fprintf(stderr, "connectに失敗しました\n"); return 1; } sprintf(send_buf, "GET %s HTTP/1.0\r\n", path); write(socketnum, send_buf, strlen(send_buf)); sprintf(send_buf, "HOST: %s:%d\r\n", dom, 80); write(socketnum, send_buf, strlen(send_buf)); sprintf(send_buf, "\r\n"); write(socketnum, send_buf, strlen(send_buf)); while(1) { char buf[BUFFSIZE]; int read_size; read_size = read(socketnum, buf, BUFFSIZE); if(read_size > 0) { write(1, buf, read_size); } else { break; } } close(socketnum); } int main(int argc , char *argv[]) { char send_buf[BUFFSIZE]; Connect(argv[1],argv[2]); return; }