윈속으로 웹페이지 긁어오는 프로그램을 만들었는데요.
작동이 되질 않습니다.
디버깅해보면 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;
}


라인피드와 캐리지
라인피드와 캐리지 리턴이 포함되어야 하지 않을까요?
sprintf(buf, "GET %s \r\n",
sprintf(buf, "GET %s \r\n", page);
이렇게 고쳐보세요.
-------------------------------------------------------------------------------
It's better to appear stupid and ask question than to be silent and remain stupid.
-------------------------------------------------------------------------------
It's better to appear stupid and ask question than to be silent and remain stupid.
댓글 달기