我想制作一个监听端口 443 的 TCP 服务器,以便它可以接收 HTTP 请求并回发。
现在我正在使用 Apache 和 PHP 以正常方式执行此操作,但是否可以在没有网络服务器的情况下执行此操作?
例如,我在 C# .NET 中构建了一个传统的 TCP/IP 客户端/服务器应用程序。是否可以使用此实现来处理 HTTP 请求而不是使用 Web 服务器?
最佳答案
在最低级别,您可以使用 HTTP 监听器类来执行此操作。
http://geekswithblogs.net/Nitin/archive/2008/06/22/using-the-http-listener-class.aspx
我曾经写过一个类似uni项目的东西,所以如果你有任何具体问题,我可以寻找代码。
如果您想更上一层楼,您可以研究网络服务。
这是我的部分代码...看看您可以用它做什么。 :
IPAddress address = IPAddress.Parse("127.0.0.1");
IPEndPoint port = new IPEndPoint(address, 9999); //port 9999
TcpListener listener = new TcpListener(port);
listener.Start();
Console.WriteLine("--Server loaded--");
while (true) //loop forever
{
Console.WriteLine("Waiting for New Client");
Socket sock = listener.AcceptSocket();
byte[] buffer = new byte[32];
string incomingMessage="";
//read:
while (sock.Available > 0)
{
int gotBytes = sock.Receive(buffer);
incomingMessage += Encoding.ASCII.GetString(buffer, 0, gotBytes);
}
//debugging:
//Console.WriteLine(incomingMessage);
//Now check whether its a GET or a POST
if (incomingMessage.ToUpper().Contains("POST") && incomingMessage.ToUpper().Contains("/DOSEARCH")) //a search has been asked for
{
Console.WriteLine("Query Has Been Received");
//extracting the post data
string htmlPostData = incomingMessage.Substring(incomingMessage.IndexOf("songName"));
string[] parameters = htmlPostData.Split('&');
string[] inputs = new string[5];
for (int i=0; i<parameters.Length; i++)
{
inputs[i] = (parameters[i].Split('='))[1];
inputs[i] = inputs[i].Replace('+',' ');
}
...
byte[] outbuffer = Encoding.ASCII.GetBytes(answerPage.ToString());
sock.Send(outbuffer);
Console.WriteLine("Results Sent");
sock.Close();
关于c# - 如何向 tcp 服务器发出 http 请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9742663/