网络编程D语言

时间:2016-09-12 18:18:47

标签: sockets networking webserver d

我想学习网络编程,所以我上网并开始研究它,我最近发现这个https://ruslanspivak.com/lsbaws-part1/但它是在python中,我目前正在尝试将其转换为D语言,所以问题是我每次在我的浏览器上点击localhost:8888它都不会返回任何内容。你能帮我弄清楚它有什么问题吗?

我刚刚从该代码逐行转换了所有内容,除了.receive和.send,在D语言中需要ubyte,所以我只是在那里放置了一个ubyte缓冲区。

import std.stdio;
import std.socket;


void main()
{

    ushort port = 8888;
    auto listener = new TcpSocket();
    writeln("Listening on port ", port);
    listener.blocking = false; 
    listener.bind(new InternetAddress(port));
    listener.listen(1);
    ubyte[] data = cast(ubyte[])"HTTP/1.1 200 OK

    <html><body>Test Works!!</body></html>";
    auto request = new ubyte[1024];
    while(true){
        listener.accept();
        listener.receive(request);
        listener.send(data);
        listener.close();
    }
}

1 个答案:

答案 0 :(得分:7)

您不使用listener.accept()的返回值,它是连接到您的客户端。另外对我来说,非阻塞在开始时就崩溃了。以下是固定代码,它按预期工作:

import std.stdio;
import std.socket;

void main()
{

    ushort port = 3000;
    auto listener = new TcpSocket();
    writeln("Listening on port ", port);
    listener.blocking = true; 
    listener.bind(new InternetAddress(port));
    listener.listen(1);
    ubyte[] data = cast(ubyte[])"HTTP/1.1 200 OK

    <html><body>Test Works!!</body></html>";
    auto request = new ubyte[1024];
    while(true){
        auto client = listener.accept();
        client.receive(request);
        client.send(data);
        client.close();
    }
}