HttpListenerContext将“%EF%BF%BD”递归添加到HttpListener.request.url

时间:2018-12-10 10:29:55

标签: c# unity3d network-programming httplistener

在我的应用程序中,我有一个HttpListener listener在单独的线程中不断在后台运行。该侦听器用于处理通过本地主机端口请求的文件。并从服务器请求所述文件。

侦听器设置如下

listener = new HttpListener();
listener.Prefixes.Add("http://+:50003/");
listener.Start();
httpListenerThread = new Thread(RunListener);
httpListenerThread.Start();

它使用保持在线程上

while (listenerIsRunning)
{
    if (listener.IsListening)
    {
         IAsyncResult result = listener.BeginGetContext(new AsyncCallback(HttpRequestListenerCallback), listener);
         result.AsyncWaitHandle.WaitOne(1);
    }
}

并且如果通过HttpListener请求文件,我将在回调中获得请求的文件名,如下所示(其中result的类型为IAsyncResult,包含object state):

 HttpListener listener = (HttpListener)result.AsyncState;
 HttpListenerContext context = listener.EndGetContext(result);
 string fileName = context.Request.Url.AbsolutePath.Substring(1);

这在大多数情况下都可以正常工作。返回期望的文件名。但是偶尔(并且不一致),它会在文件名后附加104次“%EF%BF%BD”,并在文件名后附加“ GP”。

“%EF%BF%BD%EF%BF%BD ....%EF%BF%BD%EF%BF%BDGP”

也不是每次都在同一文件上发生。在新的迭代中可以恰好请求它碰巧的文件。

在将文件发送到HttpListener之前检查文件名只会产生文件名,这意味着它会在HttpListenerHttpListenerContext的过程中添加到文件中。

/应该使用ASCII字符集完成所有操作。

我正在将Unity的.Net 2.0子集与.net 3.5等效的运行时版本一起使用

0 个答案:

没有答案