【发布时间】:2017-03-16 07:19:22
【问题描述】:
我对编写 TcpListener 有一些疑问。
第一个问题:
一旦客户端使用浏览器连接,我就会看到请求。没关系。但后来我面临写作问题。和客户端接收该数据。它基本上永远不会得到服务器的回复。我需要那个冲洗功能吗?它是如何工作的 ?还有其他方法吗?
问题 2 更奇怪。当我调用 client.close() 时,客户端不会去任何地方。它仍然存在。浏览器仍在寻找数据。当我在浏览器中终止连接时,只有 Tcp 客户端关闭并重新开始循环。
namespace TestServer
{
class Program
{
public static void Main()
{
TcpListener server;
IPAddress addr = IPAddress.Parse("127.0.0.1");
server = new TcpListener(addr, 80);
server.Start();
byte[] buffer = new byte[1024];
while(true)
{
string data = null;
Console.WriteLine("Awaiting for connections");
TcpClient client = server.AcceptTcpClient();
Console.WriteLine("Connected...");
NetworkStream str = client.GetStream();
int msgCounter;
while ((msgCounter = str.Read(buffer, 0, buffer.Length)) != 0)
{
Console.WriteLine("Processing stream...");
data += System.Text.Encoding.ASCII.GetString(buffer, 0, msgCounter);
Console.WriteLine("Reciaved: {0}", System.Text.Encoding.ASCII.GetString(buffer, 0, msgCounter));
}
byte[] response = System.Text.Encoding.ASCII.GetBytes("200 OK");
str.Write(response, 0, response.Length);
str.Flush();
client.Close();
buffer = new byte[1024];
}
}
}
}
【问题讨论】:
-
调试器说什么?
-
没有错误,真的没有。
-
但是您是否逐步完成了实施?它甚至到达
client.Close()call 了吗? -
您确定您的客户端代码正确吗?它是否监听来自服务器的响应?
-
@NewCallum 客户端是浏览器