我在ADA中通过套接字发送 header 时遇到问题。
这是代码:

    Address.Addr := Addresses(Get_Host_By_Name(Host_Name), 1);
    Address.Port := 80;
    Create_Socket(Server);
    Set_Socket_Option(Server, Socket_Level, (Reuse_Address, True));
    Bind_Socket(Server, Address);
    Listen_Socket(Server);
    Accept_Socket(Server, Socket, Address);
    Channel := Stream(Socket);

    Receive_Socket(Socket, Data, Offset);
    for I in 1 .. Offset loop
        Append(Request, Character'Val(Data(I)));
    end loop;

    String'Output(Channel,
         "HTTP/1.1 200 OK" & CRLF &
         "Date: Fri, 09 Jan 2015 01:08:54 GMT" & CRLF & CRLF &
         "something"
      );

我正在使用Firefox浏览器作为客户端。当我通过套接字读取GET请求时,一切都很好。当我尝试发送响应时出现问题。在带引号的代码的最后一行之后,我的浏览器仅获得HTTP/0.9 200 OK(通过Live HTTP header 检查),并且根本不显示任何内容(这对我来说有点奇怪,因为我只是发送HTTP/1.1 200 OK)。

非常感谢您的帮助。提前致谢 :)

最佳答案

String’Output“将Item的值写入流,包括任何边界或判别式”(ARM 13.13.2 (21))。
String是一个不确定的类型,因此您要输出的字符串的确有界,并且您要发送的是字符串的第一个字符的索引(为4字节的二进制数),最后一个字符的索引为字符串为4字节二进制数,然后为字符串。

请改用String’Write(请参阅ARM 13.13.2(9))。

10-06 05:19
查看更多