Sockets: Difference between revisions
Content added Content deleted
(→{{header|Python}}: it's always best to use .sendall instead of send, otherwise we have to check the return value for how many bytes were written.) |
m (→{{header|Java}}: Added note about using Print objects to help with streams) |
||
Line 41: | Line 41: | ||
} |
} |
||
} |
} |
||
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. |
|||
=={{header|Perl}}== |
=={{header|Perl}}== |
Revision as of 13:34, 14 February 2008
Sockets
You are encouraged to solve this task according to the task description, using any language you may know.
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
Compiler: Gnat 3.15p this example is specific to the Gnat Compiler.
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
Interpreter: 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