#pragma hdrstop
//---------------------------------------------------------------------------
#include <windows.h>
#include <stdio.h>
#define MAX_TOMEOUT 10000
#define MAX_SOCKET 5000
#define MAX_CHARBUFF 20480
#define MAX_HOSTNAME 256
#define DEFPORT 80
#define LISPORT 8471
#define DEFLISNUM 500
#define HEADLEN 7
DWORD WINAPI ProClientThread(LPVOID lpParam);
SOCKET SendHeadData(SOCKET ClientSocket,char *Msg,char *HMsg,int Datalen);
SOCKET GetServerAddr(char *Msg,int datalen);
//void ChangeSysInfo(char *Msg);
char * Get3Chars(char * Str,int *len);
void RecvSendData(SOCKET Rsck,SOCKET Ssck,char *SendBuf);
DWORD WINAPI RSThread(LPVOID lpParam);
char ErrorSendMsg[]="Http/1.1 403 Forbidden/r/n/r/n<body><h1>403 Forbidden</h1></body>";
struct sendofsck
{
SOCKET Rsck;
SOCKET Ssck;
char *Buff;
};
int main(int argc, char* argv[])
{
WSADATA WSAData;
if(WSAStartup(MAKEWORD(2,2), &WSAData))
return 1;
SOCKET ProServer= socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if(ProServer == SOCKET_ERROR)
return 1;
struct sockaddr_in ServerStk={0}, ClientCont={0};
ServerStk.sin_family = AF_INET;//inter模式
ServerStk.sin_port = htons(LISPORT);//监听端口
ServerStk.sin_addr.S_un.S_addr = INADDR_ANY;
if(bind(ProServer, (LPSOCKADDR) & ServerStk, sizeof(ServerStk)) == SOCKET_ERROR)
return 1;
if(listen(ProServer, DEFLISNUM) == SOCKET_ERROR)
return 1;
int ServerStkSize = sizeof(ClientCont);
//---------------------------------------------------------------------------
#include <windows.h>
#include <stdio.h>
#define MAX_TOMEOUT 10000
#define MAX_SOCKET 5000
#define MAX_CHARBUFF 20480
#define MAX_HOSTNAME 256
#define DEFPORT 80
#define LISPORT 8471
#define DEFLISNUM 500
#define HEADLEN 7
DWORD WINAPI ProClientThread(LPVOID lpParam);
SOCKET SendHeadData(SOCKET ClientSocket,char *Msg,char *HMsg,int Datalen);
SOCKET GetServerAddr(char *Msg,int datalen);
//void ChangeSysInfo(char *Msg);
char * Get3Chars(char * Str,int *len);
void RecvSendData(SOCKET Rsck,SOCKET Ssck,char *SendBuf);
DWORD WINAPI RSThread(LPVOID lpParam);
char ErrorSendMsg[]="Http/1.1 403 Forbidden/r/n/r/n<body><h1>403 Forbidden</h1></body>";
struct sendofsck
{
SOCKET Rsck;
SOCKET Ssck;
char *Buff;
};
int main(int argc, char* argv[])
{
WSADATA WSAData;
if(WSAStartup(MAKEWORD(2,2), &WSAData))
return 1;
SOCKET ProServer= socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if(ProServer == SOCKET_ERROR)
return 1;
struct sockaddr_in ServerStk={0}, ClientCont={0};
ServerStk.sin_family = AF_INET;//inter模式
ServerStk.sin_port = htons(LISPORT);//监听端口
ServerStk.sin_addr.S_un.S_addr = INADDR_ANY;
if(bind(ProServer, (LPSOCKADDR) & ServerStk, sizeof(ServerStk)) == SOCKET_ERROR)
return 1;
if(listen(ProServer, DEFLISNUM) == SOCKET_ERROR)
return 1;
int ServerStkSize = sizeof(ClientCont);

本文介绍了使用WinAPI和套接字编程实现一个简单的HTTP代理服务器的过程。服务器接收客户端请求,解析HTTP头信息,连接目标服务器并转发数据,支持GET、HEAD和POST请求。代码中包含接收、处理、发送数据的函数以及错误处理机制。
最低0.47元/天 解锁文章
312

被折叠的 条评论
为什么被折叠?



