Server Socket programming with Perl


P

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;
}
 
Ad

Advertisements

B

Brian McCauley

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?
 
Ad

Advertisements

P

paul f

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)?
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top