2016-09-12 20 views
2

私はネットワークプログラミングを学びたいと思っていたので、ネットにヒットして研究を始めましたが、最近これが見つかりましたhttps://ruslanspivak.com/lsbaws-part1/ですが、現在はD言語に変換しようとしています。問題は私がlocalhost:8888を押すたびに私のブラウザでは何も返されないということです。ネットワークプログラミングD言語

私は、D言語でubyteにする必要がある.receiveと.sendを除いて、すべての行をそのコードから1行ずつ変換したので、私はちょうど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(); 
    } 
} 
+0

もっと適切なリソースやDコードの例が必要な場合は、vibe.d http://vibed.org/とtcpソケット固有のライブラリを参照してください。 vibe.dの先頭https://github.com/bausshf/cheetah – Bauss

答えて

6

あなたに接続されたクライアントである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(); 
    } 
} 
関連する問題