Jump to page: 1 2
Thread overview
D Lang Socket Programming Example
Sep 06, 2013
Savsak
Sep 06, 2013
Ali Çehreli
Sep 06, 2013
Adam D. Ruppe
Sep 06, 2013
Brian Schott
Sep 06, 2013
Ramon
Sep 08, 2013
jerro
Sep 08, 2013
Savsak
Sep 08, 2013
Dicebot
Sep 08, 2013
Ramon
Sep 25, 2015
vyarthrot
Sep 26, 2015
bitwise
Sep 26, 2015
Kapps
Sep 26, 2015
bitwise
September 06, 2013
Hi Friends,

Socket programming with the D programming language is the most simple way how to do it

For example, the sample with Tango, but not by phobos

How do I do this with a simple, but phobos


import tango.io.Stdout;

import tango.net.Socket;
import tango.net.ServerSocket;
import tango.net.SocketConduit;

int main() {
    Socket server = new Socket(AddressFamily.UNIX,
                               SocketType.STREAM,
                               ProtocolType.IP);

    while(true) {
        Socket client = server.accept();

        char[1024] buffer;
        client.receive(buffer);

        Stdout.format("The client said'{}'.", buffer);

        client.shutdown(SocketShutdown.BOTH);
        client.detach();
    }
    return 0;
}
September 06, 2013
On 09/06/2013 01:47 PM, Savsak wrote:

> Hi Friends,
>
> Socket programming with the D programming language is the most simple
> way how to do it
>
> For example, the sample with Tango, but not by phobos
>
> How do I do this with a simple, but phobos
>
>
> import tango.io.Stdout;
>
> import tango.net.Socket;
> import tango.net.ServerSocket;
> import tango.net.SocketConduit;
>
> int main() {
>      Socket server = new Socket(AddressFamily.UNIX,
>                                 SocketType.STREAM,
>                                 ProtocolType.IP);
>
>      while(true) {
>          Socket client = server.accept();
>
>          char[1024] buffer;
>          client.receive(buffer);
>
>          Stdout.format("The client said'{}'.", buffer);
>
>          client.shutdown(SocketShutdown.BOTH);
>          client.detach();
>      }
>      return 0;
> }

Here is a Phobos translation:

import std.stdio;
import std.socket;

void main() {
    Socket server = new TcpSocket();
    server.setOption(SocketOptionLevel.SOCKET, SocketOption.REUSEADDR, true);
    server.bind(new InternetAddress(8080));
    server.listen(1);

    while(true) {
        Socket client = server.accept();

        char[1024] buffer;
        auto received = client.receive(buffer);

        writefln("The client said:\n%s", buffer[0.. received]);

        enum header =
            "HTTP/1.0 200 OK\nContent-Type: text/html; charset=utf-8\n\n";

        string response = header ~ "Hello World!\n";
        client.send(response);

        client.shutdown(SocketShutdown.BOTH);
        client.close();
    }
}

Ali

P.S. Note that there is also the D.learn newsgroup.

P.P.S. This question came up on two separate Turkish D forums recently:

  http://ddili.org/forum/post/10063


http://forum.ceviz.net/d-dili/127048-ddili-socket-okuma-veri-gonderme-quotnon-blocking-i-oquot.html

September 06, 2013
On Friday, 6 September 2013 at 21:02:09 UTC, Ali Çehreli wrote:
> Here is a Phobos translation:
>
>     server.bind(new InternetAddress(8080));

Not quite the same - the original used a Unix domain socket. I *think* if you replace that line with a UnixAddress:

http://dlang.org/phobos/std_socket.html#UnixAddress

It will do the trick. (I say *think* because I've never actually used a unix socket with D, so I'm not entirely sure.)
September 06, 2013
On Friday, 6 September 2013 at 21:19:51 UTC, Adam D. Ruppe wrote:
> On Friday, 6 September 2013 at 21:02:09 UTC, Ali Çehreli wrote:
>> Here is a Phobos translation:
>>
>>    server.bind(new InternetAddress(8080));
>
> Not quite the same - the original used a Unix domain socket. I *think* if you replace that line with a UnixAddress:
>
> http://dlang.org/phobos/std_socket.html#UnixAddress
>
> It will do the trick. (I say *think* because I've never actually used a unix socket with D, so I'm not entirely sure.)

http://d.puremagic.com/issues/show_bug.cgi?id=9384

It won't work. (This is why my project uses IP sockets for local communication, even on Linux)
September 06, 2013
On Friday, 6 September 2013 at 21:50:11 UTC, Brian Schott wrote:
>>>   server.bind(new InternetAddress(8080));
>>
>> Not quite the same - the original used a Unix domain socket. I *think* if you replace that line with a UnixAddress:
>>
>> http://dlang.org/phobos/std_socket.html#UnixAddress
>>
> http://d.puremagic.com/issues/show_bug.cgi?id=9384
>
> It won't work. (This is why my project uses IP sockets for local communication, even on Linux)

Meaning that domain/Unix sockets aren't available at all in D (or need to be done through C calls directly)?

September 08, 2013
On Friday, 6 September 2013 at 21:02:09 UTC, Ali Çehreli wrote:
> On 09/06/2013 01:47 PM, Savsak wrote:
>
> > Hi Friends,
> >
> > Socket programming with the D programming language is the
> most simple
> > way how to do it
> >
> > For example, the sample with Tango, but not by phobos
> >
> > How do I do this with a simple, but phobos
> >
> >
> > import tango.io.Stdout;
> >
> > import tango.net.Socket;
> > import tango.net.ServerSocket;
> > import tango.net.SocketConduit;
> >
> > int main() {
> >      Socket server = new Socket(AddressFamily.UNIX,
> >                                 SocketType.STREAM,
> >                                 ProtocolType.IP);
> >
> >      while(true) {
> >          Socket client = server.accept();
> >
> >          char[1024] buffer;
> >          client.receive(buffer);
> >
> >          Stdout.format("The client said'{}'.", buffer);
> >
> >          client.shutdown(SocketShutdown.BOTH);
> >          client.detach();
> >      }
> >      return 0;
> > }
>
> Here is a Phobos translation:
>
> import std.stdio;
> import std.socket;
>
> void main() {
>     Socket server = new TcpSocket();
>     server.setOption(SocketOptionLevel.SOCKET, SocketOption.REUSEADDR, true);
>     server.bind(new InternetAddress(8080));
>     server.listen(1);
>
>     while(true) {
>         Socket client = server.accept();
>
>         char[1024] buffer;
>         auto received = client.receive(buffer);
>
>         writefln("The client said:\n%s", buffer[0.. received]);
>
>         enum header =
>             "HTTP/1.0 200 OK\nContent-Type: text/html; charset=utf-8\n\n";
>
>         string response = header ~ "Hello World!\n";
>         client.send(response);
>
>         client.shutdown(SocketShutdown.BOTH);
>         client.close();
>     }
> }
>
> Ali
>
> P.S. Note that there is also the D.learn newsgroup.
>
> P.P.S. This question came up on two separate Turkish D forums recently:
>
>   http://ddili.org/forum/post/10063
>
>
> http://forum.ceviz.net/d-dili/127048-ddili-socket-okuma-veri-gonderme-quotnon-blocking-i-oquot.html


Thanks acehreli

In the example you give, but I receive this error during compilation.

savsak:~ savsak$ dmd /Users/savsak/Desktop/test.d
ld: library not found for -lphobos2
collect2: ld returned 1 exit status
--- errorlevel 1
September 08, 2013
> It won't work. (This is why my project uses IP sockets for local communication, even on Linux)

That has already been fixed in the version of Phobos on Github (I've marked it as fixed now, didn't know about that issue on bugzilla before).
September 08, 2013
On Sunday, 8 September 2013 at 10:42:22 UTC, Savsak wrote:
> Thanks acehreli
>
> In the example you give, but I receive this error during compilation.
>
> savsak:~ savsak$ dmd /Users/savsak/Desktop/test.d
> ld: library not found for -lphobos2
> collect2: ld returned 1 exit status
> --- errorlevel 1

Your dmd installation is broken. Please tell how have you set it up to get any fixing suggestions ;)
September 08, 2013
On Sunday, 8 September 2013 at 10:42:22 UTC, Savsak wrote:
> ...
> In the example you give, but I receive this error during compilation.
>
> savsak:~ savsak$ dmd /Users/savsak/Desktop/test.d
> ld: library not found for -lphobos2
> collect2: ld returned 1 exit status
> --- errorlevel 1

To help dicebot and others to help you it would be useful to copy the output of the following two commands:

> cat /etc/dmd.conf

> find /usr -name 'libphobos2*'

(Please note the *single* ticks (rather than ") to not have your shell resolve it. Also note that probably /usr/lib would be more efficient as search path but using /usr can also catch exotic cases like /usr/share).

If your installation is OK you will find the paths told by the find command to match those in /etc/dmd.conf.

Here is an example of a working installation:

$ find /usr -name 'libphobos2*'
/usr/lib/x86_64-linux-gnu/libphobos2.so
/usr/lib/x86_64-linux-gnu/libphobos2.a
/usr/lib/i386-linux-gnu/libphobos2.so
/usr/lib/i386-linux-gnu/libphobos2.a
/usr/lib/i386-linux-gnu/libphobos2.so.0.2
---------------

$ cat /etc/dmd.conf
// ... some comment lines ..

[Environment]

DFLAGS=-I/usr/include/dmd/phobos -I/usr/include/dmd/druntime/import -L-L/usr/lib/i386-linux-gnu -L-L/usr/lib/x86_64-linux-gnu -L--no-warn-search-mismatch -L--export-dynamic
----------------

HtH -R
September 25, 2015
On Friday, 6 September 2013 at 20:47:54 UTC, Savsak wrote:
> Hi Friends,
>
> Socket programming with the D programming language is the most simple way how to do it
>
> For example, the sample with Tango, but not by phobos
>
> How do I do this with a simple, but phobos
>
>
> import tango.io.Stdout;
>
> import tango.net.Socket;
> import tango.net.ServerSocket;
> import tango.net.SocketConduit;
>
> int main() {
>     Socket server = new Socket(AddressFamily.UNIX,
>                                SocketType.STREAM,
>                                ProtocolType.IP);
>
>     while(true) {
>         Socket client = server.accept();
>
>         char[1024] buffer;
>         client.receive(buffer);
>
>         Stdout.format("The client said'{}'.", buffer);
>
>         client.shutdown(SocketShutdown.BOTH);
>         client.detach();
>     }
>     return 0;
> }

Try this simple socket programming....

http://csharp.net-informations.com/communications/csharp-socket-programming.htm
« First   ‹ Prev
1 2