Server Socket programming with Perl

Server Socket programming with Perl

am 11.04.2008 11:21:23 von Paul F

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
bytes).

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
# server0.pl
#--------------------
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

am 12.04.2008 11:04:29 von nobull67

On Apr 11, 10:21 am, paul f wrote:
> 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
> bytes).
>
> 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)

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

am 14.04.2008 23:04:35 von Paul F

On Apr 12, 10:04=A0am, Brian McCauley wrote:
> On Apr 11, 10:21 am, paul f wrote:
>
> > Hi there ,
> > I have aGPRSdevice 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. TheGPRS
> > decvice then sends it's packet of data back to server (approx 100
> > bytes).
>
> > 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)
>
> 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?

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