Socket programming
the.chojin
the.chojin at nospan.com
Wed May 3 13:33:38 PDT 2006
Hi everyone,
I am new in D, for my first test I try to develop a simple TCP client/server
program, but the server side can not receive data and always return
Socket.ERROR although client side return the good sended bytes number.
If anyone can help me.
@+
My server side :
int main(char[][] args)
{
ushort port;
InternetAddress adress;
Socket listener;
char [1024] buffer;
/* if it not specified listen on the port 4444 */
if(args.length >= 2)
{
port = std.conv.toUshort(args[1]);
}
else
{
port = 4444;
}
listener = new TcpSocket;
/* test if the listener was created correctly */
assert(listener.isAlive);
/* nonblocking socket */
listener.blocking = true;
/* listen on port */
listener.bind(new InternetAddress(port));
{
listener.shutdown(SocketShutdown.BOTH);
}
/* listen only 1 connection */
listener.listen(10);
printf("Listening on port %d.\n", cast(int)port);
/* waiting for a connection */
try {
int erreur = 1;
listener.accept();
printf("Connected\n");
while( erreur != 0 && erreur!= Socket.ERROR ) {
/* read the socker buffer */
erreur = listener.receive(buffer);
if( Socket.ERROR != erreur ) {
printf("Received %d bytes : %.*s\n", cast(int)erreur,
buffer[0..erreur]);
} else {
printf("Error during receiving\n");
}
----------------------------------------------------------------------
My client side :
int main(char[][] args)
{
ushort port;
InternetAddress adress;
Socket listener;
int cpt = 0;
char [] buffer = "Bouyour";
const char[] adressIP = "127.0.0.1";
/* if it not specified listen on the port 4444 */
if(args.length >= 2)
{
port = std.conv.toUshort(args[1]);
}
else
{
port = 4444;
}
listener = new TcpSocket;
/* test if the listener was created correctly */
assert(listener.isAlive);
try {
listener.connect(new InternetAddress(adressIP, port));
} catch {
printf("Connection refused !!\n");
}
printf("Client connected\n");
while((cpt++ - 10)) {
int erreur = 0;
erreur = listener.send(buffer);
if(Socket.ERROR != erreur) {
printf("Sending %d bytes : %.*s\n", cast(int)erreur, buffer[0..erreur]);
} else {
printf("Error during Sending\n");
}
More information about the Digitalmars-d-learn
mailing list