C# Http服务器出现问题

C# Http服务器出现问题,c#,sockets,http,C#,Sockets,Http,我创建了一个简单的http服务器,但不幸的是它工作不正常。例如,当我使用web浏览器时,服务器不会回复。但当我使用Fiddler时,它回答了这个问题: HTTP/1.1 200 OK content-type: text/html content-length: 51 发生了什么事?另外,我使用插座 服务器 static void Main(string[] args) { // Устанавливаем для сокета локальную конечну

我创建了一个简单的http服务器,但不幸的是它工作不正常。例如,当我使用web浏览器时,服务器不会回复。但当我使用Fiddler时,它回答了这个问题:

 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#项目。我修改了我的代码,但毫无疑问,它再也不起作用了。我使用Fiddler gor调试,并且有这个有趣的东西。在响应头中,我看到了我的数据(在fiddler窗口中),但在WebBrouser中看不到。看起来是这样的:

 \\ 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());
        }
    }

我决定了麻烦!问题发生了,因为我不完全理解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";

这是因为缺少“;”

响应体的52字节在哪里?这看起来不像Java。方法以小写的char i Java开头。这是什么语言?@jbnize它似乎是C#。。。