c#插座闭合
我正在开发一个http代理应用程序,一切正常(客户端可以连接到服务器并获取内容),问题是http服务器或浏览器都没有关闭TCP连接。。我不确定我是否做对了,下面是代码:c#插座闭合,c#,sockets,networking,network-programming,C#,Sockets,Networking,Network Programming,我正在开发一个http代理应用程序,一切正常(客户端可以连接到服务器并获取内容),问题是http服务器或浏览器都没有关闭TCP连接。。我不确定我是否做对了,下面是代码: while (tcp_link.Connected && _tcp.Connected && !ioError) { try { Thread.Sleep(100); if (streamLink.DataAvailable) { b
while (tcp_link.Connected && _tcp.Connected && !ioError)
{
try
{
Thread.Sleep(100);
if (streamLink.DataAvailable)
{
byte[] l_buffer = new byte[10000];
int l_read = streamLink.Read(l_buffer, 0, l_buffer.Length);
byte[] l_data = new byte[l_read];
Array.Copy(l_buffer, l_data, l_data.Length);
_stream.Write(l_data, 0, l_data.Length);
}
if (_stream.DataAvailable)
{
byte[] c_buffer = new byte[10500];
int c_read = _stream.Read(c_buffer, 0, c_buffer.Length);
byte[] c_data = new byte[c_read];
Array.Copy(c_buffer, c_data, c_data.Length);
streamLink.Write(c_data, 0, c_data.Length);
}
}
catch
{
ioError = true;
}
}
我两边都有相同的代码(代理客户端和代理服务器)
注意:浏览器将连接到代理客户端(位于同一台计算机上),代理客户端将连接到代理服务器,显然代理服务器将连接到http服务器,原因是我不想在发送数据之前对数据进行编码您观察到连接打开了多长时间 客户端很可能使用HTTP 1.1,默认情况下,持久连接处于打开状态
如果您正在编写代理,那么您应该考虑:好的,我发现了问题,有谁在关闭套接字连接时遇到过问题 实际上,
Socket.Available
并没有像我预期的那样工作,要查看套接字是否真正连接,您应该检查可用属性和轮询属性,下面的函数应该解决您的问题:
我希望这也能解决你的问题;)可以考虑用SOCKET初始化字节[]。这段代码没有给出您试图使用的网络监控实用程序的想法,当浏览器直接连接到http服务器时,连接在收到数据后立即关闭,因此这意味着浏览器或http服务器将关闭连接,但当浏览器连接到代理客户端时,我无法检测到来自代理服务器端http服务器的任何关闭请求
bool SocketConnected(Socket s)
{
bool part1 = s.Poll(1000, SelectMode.SelectRead);
bool part2 = (s.Available == 0);
if (part1 & part2)
return false;
else
return true;
}