c 언어 socket http 프로 토 콜 로 apache 서버 방문

1.머리말
http 프로 토 콜 을 간단하게 이해 하면 보 낸 데 이 터 를 포장 한 것 입 니 다(각종 속성 을 나타 내 는 헤더 가 많 습 니 다)
이 링크 는 http 서버 작성 을 배 울 수 있 습 니 다:초 경 량 형 http 서버 tiny httpd
http 프로 토 콜 메시지
2.환경
본인 컴퓨터 는 apache+phop 의 개발 환경 을 설정 하여 80 포트 를 사용 합 니 다.
3.코드
client
// ConnectToPHPServer.cpp :              。
//

#include "stdafx.h"  
#include	 
#include	 
#include	 
#pragma comment(lib, "ws2_32.lib") 

#define PORT 80
#define SIZE 512
#define MAX_SIZE 1024

void buildGETHeader(char* header, int size, char* host, char* res)
{
	memset(header,0,size);
	strcat(header,"GET ");
	strcat(header,res);
	strcat(header," HTTP/1.1\r
"); strcat(header,"HOST:"); strcat(header,host); strcat(header,"\r
Connection: Keep-Alive\r
\r
"); return; } void buildPOSTHeader(char* header, int size, char* host, char* res) { memset(header,0,size); strcat(header,"POST "); strcat(header,res); strcat(header," HTTP/1.1\r
"); strcat(header,"HOST:"); strcat(header,host); strcat(header, "\r
Content-Type: application/x-www-form-urlencoded\r
"); strcat(header, "Content-Length: 8\r
"); strcat(header,"Connection: Keep-Alive\r
\r
"); strcat(header,"user=cjc\r
\r
"); return; } void sendData(SOCKET serverSocket, char* data) { send(serverSocket, data, strlen(data),0); } void getData(SOCKET serverSocket, char* data, int size) { int num=0; char buf[SIZE]; memset(data,0,MAX_SIZE); memset(buf,0,SIZE); while(recv(serverSocket,buf,SIZE,0)>0) { strcat(data,buf); memset(buf,0,SIZE); } return; } void parseURL(char*url , char*& host, char*& res) { char* p; int num=0; p=url+7; while(*p!='/' && *p!='\0') { p++; } if(strlen(p)!=0) { num=strlen(p)+1; res=(char*)malloc(num); memset(res,0,num); strcpy(res,p); } else { res=(char*)malloc(2); memset(res,0,2); res[0]='/'; } *p='\0'; host=url+7; return; } void connectToHost(char* host, SOCKET& serverSocket, char* res) { WSAData wsadata={0}; struct sockaddr_in addr; struct hostent* pHost; char header[SIZE],buf[MAX_SIZE]; if(WSAStartup(MAKEWORD(2,2),&wsadata)) { printf("WSASartup failed!
"); system("pause"); exit(-1); } serverSocket=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); pHost=gethostbyname(host); addr.sin_family=AF_INET; addr.sin_addr.S_un.S_addr=*((unsigned long*)pHost->h_addr); addr.sin_port=htons(PORT); connect(serverSocket,(SOCKADDR*)&addr,sizeof(addr)); printf("Connect to host OK!
"); return; } int main(void) { char url[100]="http://localhost/Workspace/FirstPHP/TestPost.php"; char *host,*res,header[SIZE],buf[MAX_SIZE]; SOCKET serverSocket; parseURL(url,host,res); connectToHost(host,serverSocket,res); /*buildGETHeader(header,SIZE,host,res); sendData(serverSocket,header); getData(serverSocket,buf,MAX_SIZE); printf("%s
",buf);*/ buildPOSTHeader(header,SIZE,host,res); sendData(serverSocket,header); getData(serverSocket,buf,MAX_SIZE); printf("%s
",buf); closesocket(serverSocket); WSACleanup(); system("pause"); return 0; }

server

4.결과
성공 하면 client 단 dox 실행 창의 끝 에 cjc 문 자 를 출력 합 니 다.

좋은 웹페이지 즐겨찾기