I would make sure you are not mixing buffered and unbuffered I/O on the same file handle. That is, the client should not use both
print and
syswrite, and the server should not read from
STDIN using
readline (or equivalently
<STDIN>) and
sysread - it will just cause you a lot of problems.
To solve your binary data problem, how about implement a simple encoding scheme?
sub write_binary {
my $fh = shift;
my $data = shift;
print $fh unpack("H*", $data), "\n";
}
sub read_binary {
my $fh = shift;
my $line = <$fh>;
chomp;
return pack("H*", $line);
}
The point is that interaction with a network server is done via sending and receiving messages, and so it's natural to have subroutines or methods to perform those functions:
my $server = ...;
$server->send_message("Hello");
...
$msg = $server->receive_message();
...
Encapsulating the interaction this way allows you to easily later change how the message sending is performed (use of
syswrite or
print, choice of encoding, etc.) Moreover, you'll need this encoding layer if you ever want to transmit anything more complex than a simple octet string. So if you want to send two data values, or an array of values or even Unicode code-points, you'll need an encoding layer.
Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
Read Where should I post X? if you're not absolutely sure you're posting in the right place.
Please read these before you post! —
Posts may use any of the Perl Monks Approved HTML tags:
- a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
| |
For: |
|
Use: |
| & | | & |
| < | | < |
| > | | > |
| [ | | [ |
| ] | | ] |
Link using PerlMonks shortcuts! What shortcuts can I use for linking?
See Writeup Formatting Tips and other pages linked from there for more info.