HTTP代理服务器的原来其实很简单,就是把客户端请求的数据发往远程服务器,再将从远程服务器的接收到的数据发往客户端。但是在编写的时候需要注意几个问题。
1. 从客户端接收数据,可以用同步的函数recv,但是发往远程服务器的时候,必须采用异步发送的方法,即用
WSASend(
SOCKET s,
LPWSABUF lpBuffers,
DWORD dwBufferCount,
LPDWORD lpNumberOfBytesSent,
DWORD dwFlags,
LPWSAOVERLAPPED lpOverlapped,
LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine
);
利用WSAWaitForMultipleEvents函数等待WSAOVERLAPPED结构中的事件对象。
如果用send函数发送的话,会已发现发送的数据量为0。
2. 代理服务器用accept函数会得到一个SOCKET,这个SOCKET用完后一定得用closesocket函数关闭掉,否则后续的SOKCET接收不进来。