Sockets

From Rosetta Code
Revision as of 18:58, 19 February 2008 by rosettacode>Mwn3d (Changed over to works with template, removed extra stuff)
Task
Sockets
You are encouraged to solve this task according to the task description, using any language you may know.

For this exercise a program is open a socket to localhost on port 256 and send the message "hello socket world" before closing the socket. Catching any exceptions or errors is not required.

Ada

Works with: Gnat version 3.15p
 with Ada.Text_IO;             use Ada.Text_IO;
 with GNAT.Sockets;            use GNAT.Sockets;
 procedure SocketSend is
    procedure sendData( ip : String ;  msg : String ) is
       Client     : Socket_Type;
       Address    : Sock_Addr_Type;
       Channel    : Stream_Access; 
       done       : boolean :=false;
    begin
       Create_Socket (Client);
       Address.Addr := Inet_Addr(ip);
       Address.Port := 256;
       Connect_Socket (Client, Address);
       Channel := Stream (Client);
       String'Write ( Channel , msg );
       Close_Socket (client);      
    end;
 begin
    initialize;
    sendData("127.0.0.1","Hello Socket World");
 end;

Java

import java.net.*;
public class SocketSend {
  public static void main(String args[]) throws java.io.IOException {
    sendData("localhost", "Hello Socket World");
  }

  public static void sendData(String host, String msg) throws java.io.IOException{
    Socket sock = new Socket( host, 256 );
    sock.getOutputStream().write(msg.getBytes());
    sock.getOutputStream().flush();
    sock.close();
  }
}

Encapsulating the Socket's OutputStream in a PrintStream (for data) or PrintWriter (for text) may be easier in more complex programs for their auto-flush abilities and their overloaded print and println methods. The write method from the original OutputStream will still be available.

Perl

use Socket;

$host = gethostbyname('localhost');
$in = sockaddr_in(256, $host);
$proto = getprotobyname('tcp');
socket(Socket_Handle, AF_INET, SOCK_STREAM, $proto);
connect(Socket_Handle, $in);
send(Socket_Handle, 'Hello socket world', 0, $in);
close(Socket_Handle);

Object oriented version.

use Socket::Class;

$sock = Socket::Class->new(
  'remote_port' => 256,
) || die Socket::Class->error;
$sock->send('Hello socket world');
$sock->free;

Python

import socket
sock = socket.socket(AF_INET, SOCK_STREAM)
sock.connect(("localhost", 256))
sock.sendall("hello socket world") 
sock.close()

Toka

 needs sockets
 
 #! A simple abstraction layer that makes writing trivial servers easy
 value| server.socket server.connection server.action |
 [ ( n- )   pBind to server.socket ] is server.setSocket
 [ ( - )    server.socket pAccept to server.connection ] is server.acceptConnection
 [ ( - )    server.connection pClose drop ] is server.closeConnection
 [ ( $- )   >r server.connection r> string.getLength pWrite drop ] is server.send
 [ ( an- )  server.connection -rot pRead drop ] is server.recieve
 [ ( qn- )  swap to server.action server.setSocket
   [ server.acceptConnection server.action invoke server.closeConnection TRUE ] whileTrue ] is server.start
 
 #! The actual server
 [ " hello socket world" server.send ] 256 server.start