A Simple Example:
$ perl test.pl
The server had a response line of: HTTP/1.1 200 OK
CODE:
#!/usr/bin/perl -w
use Socket;
#Initialize a socket
my $proto = getprotobyname('tcp');
socket(FH, PF_INET, SOCK_STREAM, $proto) || die $!;
#Establishing a network connection
my $sin = sockaddr_in(80, inet_aton('10.10.2.2'));
connect(FH, $sin) || die $!;
#send the GET method with / as a parameter
my $buffer="GET / HTTP/1.0\n\n";
syswrite(FH, $buffer, length($buffer));
#reading the response
sysread(FH, $return_line, 200);
# print out the response
print "The server had a response line of: $return_line";
close(FH);
1;
Functions Details:
CLIENT SOCKET CALLS
Initializing a Socket:
function name: socket()
parameters: SH - File handle to be associated with newly created socket.
PF_INET - Indicates IP(Internet Protocol) is to be used.
getprotobyname('tcp') - Indicates TCP is to be used on top of IP.
SOCK_STREAM - this indicates the socket is stream oriented as opposed to record oriented.
e.g.: socket(SH, PF_INET, SOCK_STREAM, getprotobyname('tcp')) || die $!;
if the socket call fails, the program should die using the error missage in $!.
Establishing a Network Connection:
function name: connect()
parameters: Socket::sockaddr_in() - Accepts a port number as first parameter and a 32 bit IP address as the second parameter.
Socket::inet_aton() - translates a hostname string or a dotted decimal string into a 32 bit IP address.
e.g.: my $sin = sockaddr_in(80,inet_aton('www.google.com'));
connect(SH, $sin) || die $!;
sockaddr_in() returns a data structure that is then passed to connect(). From there connect() attempts to establish a network connection to the specified server and port. Upon successful connection it returns a true otherwise it returns a false.
Writing a Data to a Network Connection:
function name: syswrite()
parameters: FH - File handle to write the data to.
$buffer - Data to write is second parameter.
length($buffer) - Third parameter is length of the data to be written.
e.g.: $buffer = "Hello World";
syswrite(FH, $buffer, length($buffer));
function name: print()
parameters: FH - File handle to write the data to.
data - Data to be written.
e.g.: select(FH);
$|=1; # set $| to non-zero to make selection autoflushed
print FH "hello world!";
Reading Data from a Network Connection:
function name: sysread()
parameters: FH - first parameter is a file handle used to specify the connection to read from.
$buffer - Second parameter is a scalar variable store data into.
$num - Third parameter is max number of bytes to read from the connection.
e.g.: sysread(FH, $buffer, 200);
Closing the connection:
close(FH);
SERVER SOCKET CALLS
First create a socket:
my $proto = getprotobyname('tcp');
socket(F, PF_INET, SOCK_STREAM, $proto) || die $!;
Bind the socket with a port number on the machine:
function name: bind()
parameters: F - File handle.
sockaddr_in() - to identify the port for bind().
e.g. my $sin = sockaddr_in(80, INADDR_ANY);
bind(F, $sin) || die $!;
Waiting for a connection:
function name: listen();
parameters: F - File handle.
$length - queue lenght in case of multiple clients trying to connect.
e.g. listen(F, $length) || die $!;
Accepting a connection:
function name: accept();
b FH - File handle accept will associate with a specific network connection.
F - A generic file handle associated with a server socket.
e.g. accept(FH, F) || die $!;
$ perl test.pl
The server had a response line of: HTTP/1.1 200 OK
CODE:
#!/usr/bin/perl -w
use Socket;
#Initialize a socket
my $proto = getprotobyname('tcp');
socket(FH, PF_INET, SOCK_STREAM, $proto) || die $!;
#Establishing a network connection
my $sin = sockaddr_in(80, inet_aton('10.10.2.2'));
connect(FH, $sin) || die $!;
#send the GET method with / as a parameter
my $buffer="GET / HTTP/1.0\n\n";
syswrite(FH, $buffer, length($buffer));
#reading the response
sysread(FH, $return_line, 200);
# print out the response
print "The server had a response line of: $return_line";
close(FH);
1;
Functions Details:
CLIENT SOCKET CALLS
Initializing a Socket:
function name: socket()
parameters: SH - File handle to be associated with newly created socket.
PF_INET - Indicates IP(Internet Protocol) is to be used.
getprotobyname('tcp') - Indicates TCP is to be used on top of IP.
SOCK_STREAM - this indicates the socket is stream oriented as opposed to record oriented.
e.g.: socket(SH, PF_INET, SOCK_STREAM, getprotobyname('tcp')) || die $!;
if the socket call fails, the program should die using the error missage in $!.
Establishing a Network Connection:
function name: connect()
parameters: Socket::sockaddr_in() - Accepts a port number as first parameter and a 32 bit IP address as the second parameter.
Socket::inet_aton() - translates a hostname string or a dotted decimal string into a 32 bit IP address.
e.g.: my $sin = sockaddr_in(80,inet_aton('www.google.com'));
connect(SH, $sin) || die $!;
sockaddr_in() returns a data structure that is then passed to connect(). From there connect() attempts to establish a network connection to the specified server and port. Upon successful connection it returns a true otherwise it returns a false.
Writing a Data to a Network Connection:
function name: syswrite()
parameters: FH - File handle to write the data to.
$buffer - Data to write is second parameter.
length($buffer) - Third parameter is length of the data to be written.
e.g.: $buffer = "Hello World";
syswrite(FH, $buffer, length($buffer));
function name: print()
parameters: FH - File handle to write the data to.
data - Data to be written.
e.g.: select(FH);
$|=1; # set $| to non-zero to make selection autoflushed
print FH "hello world!";
Reading Data from a Network Connection:
function name: sysread()
parameters: FH - first parameter is a file handle used to specify the connection to read from.
$buffer - Second parameter is a scalar variable store data into.
$num - Third parameter is max number of bytes to read from the connection.
e.g.: sysread(FH, $buffer, 200);
Closing the connection:
close(FH);
SERVER SOCKET CALLS
First create a socket:
my $proto = getprotobyname('tcp');
socket(F, PF_INET, SOCK_STREAM, $proto) || die $!;
Bind the socket with a port number on the machine:
function name: bind()
parameters: F - File handle.
sockaddr_in() - to identify the port for bind().
e.g. my $sin = sockaddr_in(80, INADDR_ANY);
bind(F, $sin) || die $!;
Waiting for a connection:
function name: listen();
parameters: F - File handle.
$length - queue lenght in case of multiple clients trying to connect.
e.g. listen(F, $length) || die $!;
Accepting a connection:
function name: accept();
b FH - File handle accept will associate with a specific network connection.
F - A generic file handle associated with a server socket.
e.g. accept(FH, F) || die $!;
No comments:
Post a Comment