Server Socket programming with Perl

Do you have a question? Post it now! No Registration Necessary.  Now with pictures!

Threaded View
Hi there ,
I have a GPRS device that sends it's IMEI data after a sucessfull TCP
socket is established with a Unix Server.
It waits for a sucess or failure ( 1 or 0) from the Server. The GPRS
decvice then sends it's packet of data back to server (approx 100

Can somebody help me find out how I can rearrange code below to read
IMEI data send back a 1 and read 100 byte data and save incomming data
to a logfile (say log.txt)

Source code below:

#! /usr/bin/perl -w
 use strict;
 use Socket;

 # use port 7879 as default
 my $port = shift || 7879;
 my $proto = getprotobyname('tcp');

 # create a socket, make it reusable
 socket(SERVER, PF_INET, SOCK_STREAM, $proto) or die "socket: $!";
 setsockopt(SERVER, SOL_SOCKET, SO_REUSEADDR, 1) or die "setsock:

 # grab a port on this machine
 my $paddr = sockaddr_in($port, INADDR_ANY);

 # bind to a port, then listen
 bind(SERVER, $paddr) or die "bind: $!";
 listen(SERVER, SOMAXCONN) or die "listen: $!";
 print "SERVER started on port $port ";
. # accepting a connection
 my $client_addr;
 while ($client_addr = accept(CLIENT, SERVER))
 # find out who connected
 my ($client_port, $client_ip) = sockaddr_in($client_addr);
 my $client_ipnum = inet_ntoa($client_ip);
 my $client_host = gethostbyaddr($client_ip, AF_INET);
 # print who has connected
 print "got a connection from: $client_host","[$client_ipnum] ";
 # send them a message, close connection
 print CLIENT "Smile from the server";
 close CLIENT;

Re: Server Socket programming with Perl

Quoted text here. Click to load it

No you can't just rearrange it - you need to add the statements that
read and write. Oh yes and you need to open the log file too.

You need first to be 100% clear by what you mean by glib phrases like
"sends it's IMEI" (fixed length record? Terminated record? (What
terminator?) String representation? Binary representation? (Which
one?) Terminated record? (What terminator?).

Same questions again for "send back a 1".

To send a byte 1.

print CLIENT "\x01";

To read fixed length records use read() (you can also use readline()
by setting the read terminator $/ to a reference to a scalar
containing the number of records in the if you prefer).

read ( CLIENT, my $record, 100) or whatever...

As for logging a 100 byte binary record to a textual log file unpack/
pack/sprintf are your friends..

print LOG unpack 'H*', $record;

What format would you like it in?

Can you be more precise about where you are getting stuck?

Re: Server Socket programming with Perl

Quoted text here. Click to load it

How do I send two bytes to Client zero then 1 (01 hex)?

Site Timeline