윈속으로 웹페이지 긁어오는 프로그램을 만들었는데요.
작동이 되질 않습니다.
디버깅해보면 recv()에서 블락킹이 걸리네요.
패킷을 보면 분명히 GET은 전달하는데..
telnet server 80 치고 GET 엔터 하면 페이지가 잘 뜨는데
어째서 제가 만든 프로그램에선 안되는걸까요?ㅠ_ㅠ
char* get_html(char *address)
{
WSADATA wsaData;
SOCKET sock;
LPHOSTENT lpHostEntry;
SOCKADDR_IN server_addr;
int datasize;
char server[ADDR_LEN];
char page[ADDR_LEN];
char *data;
int i;
char buf[BUFFER];
int nRet;
// 주소 파싱
for (i = 7 ; i < strlen(address) ; i++)
if (address[i] == '/') break;
strcpy(server, address);
server[i] = '\0';
strcpy(page, &address[i+1]);
printf("서버네임 : %s, 페이지네임 : %s\n", server, page);
WSAStartup(MAKEWORD(2, 2), &wsaData);
sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (sock == INVALID_SOCKET)
{
printf("socket() error\n)");
exit(0);
}
lpHostEntry = gethostbyname(server);
if (lpHostEntry == NULL)
{
printf("함수 gethostbyname() 호출 하는 중에 문제가 발생했습니다.");
exit(0);
}
memset(&server_addr, 0, sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_addr = *( (LPIN_ADDR) *lpHostEntry->h_addr_list);
server_addr.sin_port = htons(80);
nRet = connect(sock, (LPSOCKADDR)&server_addr, sizeof(server_addr) );
if (nRet == SOCKET_ERROR)
{
printf("connect() 함수를 호출하는데 문제가 발생했습니다.");
exit(0);
}
sprintf(buf, "GET %s", page);
send(sock, buf, strlen(buf), 0);
datasize = recv(sock, buf, BUFFER, 0);
if (datasize == SOCKET_ERROR)
{
printf("recv() 함수를 호출하는데 문제가 발생했습니다.");
exit(0);
}
WSACleanup();
return buf;
}
댓글 달기