我的问题是,当你有一个代理服务器,你需要发送/ recv与客户端和发送/ recv与远程服务器你怎么知道在哪一端有数据要发送/ recv所以我可以调用相应的功能。 我需要从一个网站收发/发送字节到客户端(通过代理)和从客户端到服务器(通过代理),但我不知道它们将以什么顺序出现,我看到大多数网站都有所不同。登记/> 我目前的实施是:
1) receive from client
2) send to server
//infinite loop here
3) receive from server
4) send to client
// until bytes from server is 0
这适用于少数网站,并且不会完全加载它们,只有15-20 KB 有什么建议吗?
答案 0 :(得分:1)
您的任务是将数据从客户端转发到服务器并返回。由于客户端和服务器可以同时传输数据,当您从客户端读取所有内容而不是将其传递给服务器时接近,反之亦然无效:在等待客户端开始传输时考虑情况,客户端在启动传输之前想要从服务器获取数据自己的传输。
因此,有以下方法可以使其发挥作用:
select(2)
功能(或来自Windows API的类似sys调用)+非阻塞套接字。这将告诉您何时需要读取或写入数据。如果要为每个线程提供多个客户端,则需要非阻塞套接字,因此线程不会在读/写系统调用中被阻塞。select
样本,互联网上有很多信息。 一个致力于服务器开发的着名页面是here。
答案 1 :(得分:0)
从客户处收到 发送到服务器 而(真) { if(recvfrom服务器不为零) 发送给客户 if(recvfrom客户端不为零) 发送到服务器 }
我认为这可能有用..
答案 2 :(得分:0)
使用select()
等待数据从任何一方获得,然后阅读并传递它。