我创建了一个简单的 http 服务器,但不幸的是它工作错误。例如,当我使用网络浏览器时,服务器不会回复。但是当我使用 Fiddler 时,它回答了这个问题:
HTTP/1.1 200 OK
content-type: text/html
content-length: 51
到底是怎么回事?PS。我使用插座。
服务器
static void Main(string[] args)
{
// Устанавливаем для сокета локальную конечную точку
IPHostEntry ipHost = Dns.Resolve("192.168.1.103");
IPAddress ipAddr = ipHost.AddressList[0];
IPEndPoint ipEndPoint = new IPEndPoint(ipAddr, 8080); // Порт потом поменять 80
// Создаем сокет Tcp/Ip
Socket socketListener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
// Назначаем сокет локальной конечной точке и слушаем входящие
try
{
socketListener.Bind(ipEndPoint);
socketListener.Listen(10);
//Начинаме слушать
while (true)
{
Console.WriteLine("Waiting for a connection on port {0}", ipEndPoint);
Socket handler = socketListener.Accept();
string data = null;
// Дождались клиента, пытающегося соединиться
while (!Console.KeyAvailable)
{
byte[] bytes = new byte[1024];
int bytesRec = handler.Receive(bytes);
data += Encoding.ASCII.GetString(bytes, 0, bytesRec);
if (data.IndexOf("\n") > -1)
{
break;
}
}
Console.WriteLine("Text Received: {0}", data);
string theReply = "HTTP/1.1 200 OK";
theReply += "\r\n";
theReply+="content-type: text/html";
theReply += "\r\n";
theReply += "content-length: 51";
theReply += "\r\n";
byte[] msg = Encoding.ASCII.GetBytes(theReply);
handler.Send(msg);
handler.Shutdown(SocketShutdown.Both);
handler.Close();
}
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
Console.ReadLine();
}
客户
static void Main(string[] args)
{
byte[] bytes = new byte[1024];
// Соединяемся с удаленным устройством
try
{
//Устанавиваем удаленную конечную точку для сокета
IPHostEntry ipHost = Dns.Resolve("192.168.1.103");
IPAddress ipAddr = ipAddr = ipHost.AddressList[0];
IPEndPoint ipEndpoint = new IPEndPoint(ipAddr, 8080);
Socket socketSender = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
// Соединяем сокет с удаленной конечной точкой
socketSender.Connect(ipEndpoint);
Console.WriteLine("Socket connected to {0}", socketSender.RemoteEndPoint.ToString());
string theMessage = "GET /RService2 HTTP/1.0";
theMessage += "\r\n";
byte[] msg = Encoding.ASCII.GetBytes(theMessage);
//Отправляем данные через сокет
int byteSent = socketSender.Send(msg);
//Получаем ответ
int bytesRec = socketSender.Receive(bytes);
Console.WriteLine("The Server said: {0}", Encoding.ASCII.GetString(bytes, 0, bytesRec));
socketSender.Shutdown(SocketShutdown.Both);
socketSender.Close();
Console.ReadLine();
}
catch (Exception e)
{
Console.WriteLine("Exception {0}", e.ToString());
}
它是 C# 项目。我更改了我的代码,但很遗憾它不再起作用。我使用 Fiddler gor 调试,并且有这个有趣的东西。在响应标题中,我看到了我的数据(在提琴手窗口中),但在 web-brouser 中没有。它看起来像这样:
\\ Server
class Program
{
static void Main(string[] args)
{
byte[] bytes = new byte[1024];
// Соединяемся с удаленным устройством
try
{
//Устанавиваем удаленную конечную точку для сокета
IPHostEntry ipHost = Dns.Resolve("192.168.1.103");
IPAddress ipAddr = ipAddr = ipHost.AddressList[0];
IPEndPoint ipEndpoint = new IPEndPoint(ipAddr, 8080);
Socket socketSender = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
// Соединяем сокет с удаленной конечной точкой
socketSender.Connect(ipEndpoint);
Console.WriteLine("Socket connected to {0}", socketSender.RemoteEndPoint.ToString());
string theMessage = "GET /RService2 HTTP/1.0";
theMessage += "\r\n\r\n";
byte[] request = Encoding.ASCII.GetBytes(theMessage);
//Отправляем данные через сокет
int byteSent = socketSender.Send(request);
//Получаем ответ
int bytesRec = socketSender.Receive(bytes);
Console.WriteLine("The Server said: {0}", Encoding.ASCII.GetString(bytes, 0, bytesRec));
socketSender.Shutdown(SocketShutdown.Both);
socketSender.Close();
Console.ReadLine();
}
catch (Exception e)
{
Console.WriteLine("Exception {0}", e.ToString());
}
}