コード例 #1
0
ファイル: webserv_win.c プロジェクト: beyondhxl/TcpIP
unsigned WINAPI RequestHandler(void *arg)
{
	SOCKET hClntSock=(SOCKET)arg;
	char buf[BUF_SIZE];
	char method[BUF_SMALL];
	char ct[BUF_SMALL];
	char fileName[BUF_SMALL];
	
	recv(hClntSock, buf, BUF_SIZE, 0);
	if(strstr(buf, "HTTP/")==NULL)    // HTTP에 의한 요청인지 확인
	{
		SendErrorMSG(hClntSock);
		closesocket(hClntSock);
		return 1;
	}
	
	strcpy(method, strtok(buf, " /"));
	if(strcmp(method, "GET"))    // GET 방식 요청인지 확인 
		SendErrorMSG(hClntSock);

	strcpy(fileName, strtok(NULL, " /"));    // 요청 파일이름 확인
	strcpy(ct, ContentType(fileName));    // Content-type 확인	
	SendData(hClntSock, ct, fileName);    // 응  답
	return 0;
}
コード例 #2
0
ファイル: webserv_win.c プロジェクト: beyondhxl/TcpIP
void SendData(SOCKET sock, char* ct, char* fileName) 
{	
	char protocol[]="HTTP/1.0 200 OK\r\n";
	char servName[]="Server:simple web server\r\n";
	char cntLen[]="Content-length:2048\r\n";
	char cntType[BUF_SMALL];
	char buf[BUF_SIZE];
	FILE* sendFile;

	sprintf(cntType, "Content-type:%s\r\n\r\n", ct);
	if((sendFile=fopen(fileName, "r"))==NULL)
	{
		SendErrorMSG(sock);
		return;
	}

	/* 헤더 정보 전송 */
	send(sock, protocol, strlen(protocol), 0);
	send(sock, servName, strlen(servName), 0);
	send(sock, cntLen, strlen(cntLen), 0); 
	send(sock, cntType, strlen(cntType), 0);

	/* 요청 데이터 전송 */
	while(fgets(buf, BUF_SIZE, sendFile)!=NULL) 
		send(sock, buf, strlen(buf), 0);

	closesocket(sock);   // HTTP 프로토콜에 의해서 응답 후 종료
}
コード例 #3
0
ファイル: WebServer.cpp プロジェクト: skdn159/HW_Networks
unsigned WINAPI RequestHandler(void* arg)
{
	SOCKET hClntSock = (SOCKET)arg;
	char buf[BUF_SIZE] = { 0, };
	char method[BUF_SMALL] = { 0, };
	char ct[BUF_SMALL] = { 0, };
	char fileName[BUF_SMALL] = { 0, };

	if (recv(hClntSock, buf, BUF_SIZE, 0) == SOCKET_ERROR)
		ErrorHandling("[DEBUG]recv() Error");

	if (strstr(buf, "HTTP/") == NULL)
	{
		SendErrorMSG(hClntSock, ERROR_400_BAD_REQUEST);
		closesocket(hClntSock);
		return 1;
	}

	strcpy(method, strtok(buf, " "));
	if (strcmp(method, "GET"))
		SendErrorMSG(hClntSock, ERROR_400_BAD_REQUEST);

	strcpy(fileName, strtok(NULL, " "));
	memmove(fileName + 1, fileName, strlen(fileName));
	fileName[0] = '.';
	for (unsigned int i = 0; i < strlen(fileName) + 1; ++i)
	{
		if (fileName[i] == '/')
			fileName[i] = '\\';
	}

	char* type = ContentType(fileName);
	if (type == NULL)
	{
		SendErrorMSG(hClntSock, ERROR_404_NOT_FOUND);
		closesocket(hClntSock);
		return 0;
	}

	strcpy(ct, ContentType(fileName));
	SendData(hClntSock, ct, fileName);
	return 0;
}
コード例 #4
0
ファイル: WebServer.cpp プロジェクト: skdn159/HW_Networks
void SendData(SOCKET socket, char* ct, char* fileName)
{
	char protocol[] = "HTTP/1.0 200 OK\r\n";
	char servName[] = "Server:simple web server\r\n";
	char cntLen[BUF_SMALL];
	char cntType[BUF_SMALL] = { 0, };
	char buf[BUF_SIZE] = { 0, };
	FILE* sendFile;

	sprintf_s(cntType, "Content-type:%s\r\n\r\n", ct);
	if ((sendFile = fopen(fileName, "rb")) == NULL)
	{
		SendErrorMSG(socket, ERROR_404_NOT_FOUND);
		return;
	}

	int fileSize;
	fseek(sendFile, 0, SEEK_END);
	fileSize = ftell(sendFile);
	fseek(sendFile, 0, SEEK_SET);

	sprintf_s(cntLen, "Content-length : %d\r\n", fileSize);

	if (send(socket, protocol, strlen(protocol), 0) == SOCKET_ERROR)
		ErrorHandling("[DEBUG] send() : protocol Error");

	if (send(socket, servName, strlen(servName), 0) == SOCKET_ERROR)
		ErrorHandling("[DEBUG] send() : servName Error");

	if (send(socket, cntType, strlen(cntType), 0) == SOCKET_ERROR)
		ErrorHandling("[DEBUG] send() : cntType Error");

	while (!feof(sendFile))
	{
		int read = fread(buf, 1, BUF_SIZE, sendFile);
		send(socket, buf, read, 0);
	}

	closesocket(socket);
	fclose(sendFile);
}