2016-09-12 6 views
2

저는 네트워크 프로그래밍을 배우기를 원했기 때문에 인터넷에 접속하여 연구를 시작했습니다. 최근에 발견 된 것은 https://ruslanspivak.com/lsbaws-part1/이지만 파이썬에서는 현재이 언어를 D 언어로 변환하려고합니다. 문제는 매번 브라우저에서 localhost : 8888을 누를 때마다 아무 것도 반환하지 않는다는 것입니다. 무엇이 잘못되었는지 알아 내도록 도와 줄 수 있습니까?네트워크 프로그래밍 D 언어

.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(); 
    } 
} 
+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(); 
    } 
}