我创建了一个简单的http服务器,但遗憾的是它工作错误。例如,当我使用Web浏览器时,服务器不会回复。但是,当我使用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调试,并有这个有趣的事情。在响应标题中,我看到了我的数据(在fiddler窗口中),但在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());
}
}
答案 0 :(得分:0)
我决定了麻烦!问题发生了,因为我完全不了解RCF标准。例如
string statusLine = "HTTP/1.1 200 OK" + "\r\n";
string contentLength = "content-length: " + size + ";\r\n";
string contentType = "content-type: text/html;" + "\r\n";
但很早就像这样
string statusLine = "HTTP/1.1 200 OK" + "\r\n";
string contentLength = "content-length: " + size + "\r\n";
string contentType = "content-type: text/html" + "\r\n";
缺少“;”