C代理服务器丢弃请求
我有一个小小的C代理服务器,我只想从客户端一次得到一个请求,然后从服务器返回响应没有管道,没有任何高级功能,只是一个持久的http连接 结构:C代理服务器丢弃请求,c,sockets,http,proxy,httprequest,C,Sockets,Http,Proxy,Httprequest,我有一个小小的C代理服务器,我只想从客户端一次得到一个请求,然后从服务器返回响应没有管道,没有任何高级功能,只是一个持久的http连接 结构: typedef struct http_request { char* h_data; // Header raw data int h_size; // Header size char host[5000]; // Host to connect to char r
typedef struct http_request {
char* h_data; // Header raw data
int h_size; // Header size
char host[5000]; // Host to connect to
char resource[5000]; // Resource to get
} http_request;
typedef struct http_response {
char* h_data; // Header raw data
int h_size; // Header size
char* b_data; // Body raw data
int b_size; // Content-length of the body
} http_response;
代码:
while(1){
//正在等待用户连接
int sock_user=accept(sock,(struct sockaddr*)NULL,NULL);
int sock_host=-1;
//一次接受一个请求并响应
而(1){
http_请求请求;
http_响应响应;
//1.客户端==>代理服务器
http_parse_请求(sock_用户,&req);//使用recv(sock_用户)
//2.客户端代理==>服务器
if(sock_主机<0)
sock\u host=代理连接主机(请求主机);
写入(sock_主机、req.h_数据、req.h_大小);
//3.客户端代理为什么不使用现有的代理,比如-可能带有-或者HTTP服务器库,比如?为哪个操作系统编写代码?浏览器通常会在同一个操作系统上发送多个请求,并且可能会有多个连接。可靠地实现非常复杂…这是任务的一部分,所以我必须这么做这是一个很好的学习方法。哦,这是Linux。我知道它很复杂,但我的例子很简单。它只是用来处理GET请求,而不是别的。然后阅读更多关于HTTP协议的内容。
while(1){
// Waiting for user to connect
int sock_user = accept(sock, (struct sockaddr*)NULL, NULL);
int sock_host=-1;
// Accept 1 request at a time and respond
while(1){
http_request req;
http_response resp;
// 1. Client ==> Proxy Server
http_parse_request(sock_user, &req); // uses recv(sock_user)
// 2. Client Proxy ==> Server
if (sock_host < 0)
sock_host=proxy_connect_host(req.host);
write(sock_host, req.h_data, req.h_size);
// 3. Client Proxy <== Server
http_parse_response(sock_host, &resp); // uses send(sock_host)
// 4. Client <== Proxy Server
write(sock_user, resp.h_data, resp.h_size);
write(sock_user, resp.b_data, resp.b_size);
}
}