【发布时间】:2011-08-10 13:25:42
【问题描述】:
我正在用 C# 做一个嵌入式项目,并且我已经编写了一个基于套接字的 Web 服务器。一切都很好,除了我一生都无法获得请求正文。 Content-Length 表示有 12 个字符,但是 socket.Recieve 方法只获取 headers。
while (true)
{
using (Socket clientSocket = listeningSocket.Accept())
{
IPEndPoint clientIP = clientSocket.RemoteEndPoint as IPEndPoint;
Debug.Print("Received request from " + clientIP.ToString());
var x = clientSocket.RemoteEndPoint;
int availableBytes = clientSocket.Available;
Debug.Print(DateTime.Now.ToString() + " " + availableBytes.ToString() + " request bytes available");
int bytesReceived = (availableBytes > maxRequestSize ? maxRequestSize : availableBytes);
if (bytesReceived > 0)
{
byte[] buffer = new byte[bytesReceived]; // Buffer probably should be larger than this.
int readByteCount = clientSocket.Receive(buffer, bytesReceived, SocketFlags.None);
using (Request r = new Request(clientSocket, Encoding.UTF8.GetChars(buffer)))
{
Debug.Print(DateTime.Now.ToString() + " " + r.URL);
if (requestReceived != null) requestReceived(r);
}
}
}
Thread.Sleep(10);
}
availableBytes = 499
bytesReceived = 499
readByteCount = 487(短 12 个字符)
我在这里缺少什么?正文是多部分表单数据,如果这有什么不同的话。
【问题讨论】:
-
就调查而言,如果使用 SocketFlags.Peek 会得到不同的 readByteCount 吗?
-
@Russ 我已经尝试了所有套接字标志。没有运气。
-
您可能想使用我的嵌入式 Web 服务器:webserver.codeplex.com。它是免费的,使用 C# 编码
-
@jgauffin 可以在 .net 微框架上使用吗?