概要
paizaのcでズンドコゲッターやってみた。
実際
サンプルコード
# include <stdio.h>
# include <stdlib.h>
# include <time.h>
# include <string.h>
# include <sys/types.h>
# include <sys/socket.h>
# include <netinet/in.h>
# include <arpa/inet.h>
# include <netdb.h>
char * zundoko(void)
{
struct sockaddr_in server;
int sock;
char buf[256];
char * deststr = "ohijs0.paas.jp-e1.cloudn-service.com";
unsigned int ** addrptr;
sock = socket(AF_INET, SOCK_STREAM, 0);
if (sock < 0)
{
perror("socket");
return 1;
}
server.sin_family = AF_INET;
server.sin_port = htons(80);
server.sin_addr.s_addr = inet_addr(deststr);
if (server.sin_addr.s_addr == 0xffffffff)
{
struct hostent * host;
host = gethostbyname(deststr);
if (host == NULL)
{
if (h_errno == HOST_NOT_FOUND)
{
printf("host not found : %s\n", deststr);
}
else
{
printf("%s : %s\n", hstrerror(h_errno), deststr);
}
return 1;
}
addrptr = (unsigned int **) host->h_addr_list;
while (* addrptr != NULL)
{
server.sin_addr.s_addr = * (* addrptr);
if (connect(sock, (struct sockaddr *) &server, sizeof(server)) == 0)
{
break;
}
addrptr++;
}
if (* addrptr == NULL)
{
perror("connect");
return 1;
}
else
{
//printf("ok connect\n");
}
}
else
{
if (connect(sock, (struct sockaddr *) &server, sizeof(server)) != 0)
{
perror("connect");
return 1;
}
}
memset(buf, 0, sizeof(buf));
snprintf(buf, sizeof(buf), "GET /zundoko HTTP/1.1\r\nHost: ohijs0.paas.jp-e1.cloudn-service.com\r\nUser-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)\r\n\r\n");
int n = write(sock, buf, (int) strlen(buf));
if (n < 0)
{
perror("write");
return 1;
}
else
{
//printf("ok write %d\n", n);
}
memset(buf, 0, sizeof(buf));
n = read(sock, buf, sizeof(buf));
if (n < 0)
{
perror("read");
return 1;
}
else
{
//printf("ok read %d\n", n);
}
char t[64];
char * g;
g = strstr(buf, "\r\n\r\n");
g += 4;
//puts(g);
close(sock);
return g;
}
int main()
{
int i = 0;
int j = 0;
printf("ここから ");
while (j < 1)
{
char * s = zundoko();
printf("%s ", s);
if (strcmp(s, "ドコ") == 0)
{
if (i == 4) j = 1;
i = 0;
}
else
{
i++;
}
}
printf("キ・ヨ・シ!");
}