Do you have a question? Post it now! No Registration Necessary. Now with pictures!
- Posted on
- Server Socket programming with Perl
April 11, 2008, 9:21 am
rate this thread
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 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
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";
Re: Server Socket programming with Perl
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?