IO::Socket: buffering error ?

G

galdor

Hi,

It seems i've a problem with socket-buffering ; i use IO::Socket::INET
to connect a client-program to a server-program, and send orders.

Every connection to the server is well-detected, but every string i
send to the server arrives *only* when i close the client-socket.

I've tried the flush and autoflush method, but result is the same.

Anyone would have an idea ?
 
X

xhoster

galdor said:
Hi,

It seems i've a problem with socket-buffering ; i use IO::Socket::INET
to connect a client-program to a server-program, and send orders.

Every connection to the server is well-detected, but every string i
send to the server arrives *only* when i close the client-socket.

Sounds like you have a flushing problem.

I've tried the flush and autoflush method, but result is the same.

Maybe you did it wrong.
Anyone would have an idea ?

My idea would be make a small complete program which demonstrates the
problem, and show the damn thing to the people you are asking for help.
Maybe that is just me.

Xho
 
F

Fabian Pilkowski

Well, please learn how to quote properly. I know Google is not the best
newsreader you could use, but I've heard there is an option to quote as
recommended. Please, read something about quoting in newsgroups, eg at

http://www.netmeister.org/news/learn2quote.html

It would be in *your* interest to provide some context when composing
contributions to a newsgroup. In the following, I fixed this for you.


Well, your server is reading the messages line by line. But how to know
the length of a line? Right, simply add a CRLF ("\r\n") to the rear of
the messages. I prefer to use IO::Socket's capabilities for this (you've
to change the use-statement for IO::Socket::INET for that):

use IO::Socket::INET qw( SOCK_STREAM CRLF );
print $sock_com $comres{"com"}, CRLF;

With that, your server reads the messages when they arrived instead of
reading them when the socket is closed. The CRLF means as much as "this
is the end of this message".

Btw, I suggest to turn on autoflush for STDOUT by writing

$|++;

in the beginning of your script (well, this could be a particularity of
my console on WinXP, but without that I don't see anything on my screen
before the script terminates -- your console's behavior could differ).
You'll find the both client and server program here:
http://darkmaster.sp.free.fr/prog/perl/

That is not exactly what Xho meant by asking for a "small complete
program". Indeed, they are complete programs, but "small" means to
remove all unnecessary parts of your scripts. Shortening a script is
what *you* should do in order that *we* don't have to search for the
relevant parts in your script.

regards,
fabian
 
G

galdor

Fabian Pilkowski a écrit :
Well, please learn how to quote properly.
Understood :)

Well, your server is reading the messages line by line. But how to know
the length of a line? Right, simply add a CRLF ("\r\n") to the rear of
the messages. I prefer to use IO::Socket's capabilities for this (you've
to change the use-statement for IO::Socket::INET for that):

use IO::Socket::INET qw( SOCK_STREAM CRLF );
print $sock_com $comres{"com"}, CRLF;

With that, your server reads the messages when they arrived instead of
reading them when the socket is closed. The CRLF means as much as "this
is the end of this message".
Fine trick, it's all good, !


That is not exactly what Xho meant by asking for a "small complete
program". Indeed, they are complete programs, but "small" means to
remove all unnecessary parts of your scripts. Shortening a script is
what *you* should do in order that *we* don't have to search for the
relevant parts in your script.
Ok, understood too.

Thank's for your help !

galdor
 

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

Members online

No members online now.

Forum statistics

Threads
473,769
Messages
2,569,580
Members
45,054
Latest member
TrimKetoBoost

Latest Threads

Top