Http服务器有问题

时间:2013-11-14 10:55:45

标签: c# sockets http

我创建了一个简单的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());
        }
    }

1 个答案:

答案 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";

缺少“;”