【发布时间】:2012-11-29 10:55:40
【问题描述】:
我在 D 中有以下原始服务器:
import std.stdio;
import std.socket;
int main() {
const int port = 8080;
InternetAddress addr = new InternetAddress(InternetAddress.ADDR_ANY, port);
TcpSocket server = new TcpSocket(AddressFamily.INET);
server.bind(addr);
server.listen(10);
for(;;) {
Socket newclient = server.accept();
newclient.send("HTTP/1.1 200 OK\r\n");
newclient.send("Content-type: text/html\n\n");
newclient.send("Hi from D!");
newclient.shutdown(SocketShutdown.BOTH);
newclient.close();
}
return 0;
}
如果我使用浏览器连接,它不会显示“Hi From D!”,而只是断开连接。
我的假设是 send() 缓冲数据,我必须刷新该缓冲区。但我还没想好你会怎么做。有趣的是,如果使用 writefln("asdf asdf\n"); 将一些数据写入 STDOUT,则代码可以工作。在最后一次调用 send() 之后,因此我的假设。
还是我找错树了?
【问题讨论】:
-
在处理 HTTP 时使用
\r\n,因为如果我没记错的话,这就是协议所要求的。无论如何,我想知道的是 - 你 100% 确定这不是 Windows 防火墙问题吗? barti_ddu 的代码也应该可以在 Windows 上运行,唯一没有意义的原因是 Windows 防火墙不允许您连接...