在我的应用程序中,我有一个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之前检查文件名只会产生文件名,这意味着它会在HttpListener
或HttpListenerContext
的过程中添加到文件中。
/应该使用ASCII字符集完成所有操作。
我正在将Unity的.Net 2.0子集与.net 3.5等效的运行时版本一起使用