-1
간단한 http 서버를 만들었지 만, 불행히도 제대로 작동하지 않습니다. 예를 들어, 웹 브라우저를 사용할 때 서버가 응답하지 않습니다.HTTP 서버에 문제가 있습니다.
HTTP/1.1 200 OK
content-type: text/html
content-length: 51
을 무슨 일이야 : 내가 피들러를 사용하는 경우 그러나이 대답? 추신. 나는 소켓을 사용한다.
서버
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# 프로젝트입니다. 내 코드를 변경했지만 unfortantly 그것은 다시 작동하지 않습니다. 나는 Fiddler gor 디버깅을 사용하고 흥미로운 점이있다. 응답 헤더에서 내 데이터를 봅니다 (바이올린 창에서). 그러나 웹 브로커에서는 그렇지 않습니다. 모양은 다음과 같습니다.
\\ 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());
}
}
응답 본문의 52 바이트는 어디에 있습니까? –
이것은 자바처럼 보이지 않습니다. 메소드는 소문자로 시작합니다. Java. 와트 언어가 이거 야? –
@JBNizet C# 인 것 같습니다. – neutrino