当我在Win8上运行它时,我在程序中遇到了一个问题(它在WinXP上运行正常)。如果有人能就一些事情发表意见,我将不胜感激。似乎WinXP和Win8之间的某些网络设置已经改变。
这里我制作的示例代码对我来说很奇怪:
HttpListener在本地侦听端口20000
static void Main(string[] args)
{
// Create listener
HttpListener listener = new HttpListener();
listener.Prefixes.Add("http://127.0.0.1:20000/");
listener.Start();
Console.WriteLine("Listening...");
// Wait for request
HttpListenerContext context = listener.GetContext();
HttpListenerResponse response = context.Response;
// Create response
string responseString = GenerateString();
byte[] buffer = System.Text.Encoding.UTF8.GetBytes(responseString);
response.ContentLength64 = buffer.Length;
// Send response
System.IO.Stream output = response.OutputStream;
output.Write(buffer, 0, buffer.Length);
output.Close();
listener.Stop();
Console.ReadLine();
}
private static string GenerateString()
{
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 6000000; i++)
{
sb.Append("A");
}
return sb.ToString();
}
WebClient从端口20000下载字符串
static void Main(string[] args)
{
WebClient c = new WebClient();
//c.Proxy = null;
try
{
Console.WriteLine("Start downloading: {0}", DateTime.Now.ToString("hh:mm:ss.fff"));
c.DownloadStringCompleted += (s,a) => OnDownloadStringCompleted(s,a);
c.DownloadStringAsync(new Uri("http://127.0.0.1:20000"), c);
//c.DownloadString(new Uri("http://127.0.0.1:20000"));
//Console.WriteLine("Finish downloading: {0}", DateTime.Now.ToString("hh:mm:ss.fff"));
}
catch(Exception e)
{
Console.WriteLine(e.Message);
}
Console.ReadLine();
c.Dispose();
}
private static void OnDownloadStringCompleted(object s, DownloadStringCompletedEventArgs arg)
{
try
{
string response = arg.Result;
Console.WriteLine("Finish downloading: {0}", DateTime.Now.ToString("hh:mm:ss.fff"));
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
如果我在我的XP机器上运行它可以正常工作(WebClient异步下载字符串)。如果我在Win8机器上运行它(我尝试使用Win8和Win8.1的2台机器),那么它取决于我传递给HttpListenerResponse.OutputStream的字符串的大小 - 比如,对于100000个字符的小响应字符串,它工作正常,但对于6000000 chars它只在有时工作,有时会抛出错误:&#34;现有连接被远程主机强行关闭&#34;或&#34;无法建立连接,因为目标计算机主动拒绝它127.0.0.1:20000"。
另一个奇怪的事情是同步DownloadString(在那里注释)似乎在Win8上运行良好!
实际上,我有点迷茫,实在是太奇怪了。我不确定为什么它有时会起作用,但似乎它在我构建之后第一次起作用然后停止工作。
到目前为止我尝试过的事情: 1.禁用Windows防火墙 - 没有帮助 2.使用localhost&lt; - &gt; 127.0.0.1(Win8似乎更改了有关DNS的策略,因此localhost可能工作较慢或无法在不更改主机的情况下工作)。 127.0.0.1和localhost都以这种奇怪的方式工作。 3.从管理员和用户运行代码 - 也没有帮助。
有没有人经历过这件事,或者你有一些线索?