请教io::socket::net

请教io::socket::net

Hi,大家好,最近想用cgi/perl写一个测试页面,服务器为c程序。过程很简单,由用户输入相关内容,传给服务端,然后接收服务器端得返回内容。

代码如下:
$| = 1;
my $sock = IO::Socket::INET->new('$svr_ip_addr : $port');
die "sock creat fail : $!" unless $sock;

my $query = $encodeForm{"query"};
print $sock $query;

my $days;    //返回一个int型
my $data;   //返回100个int型

$sock->recv($days,4,0);
$sock->recv($data,4*100,0);

$sock->close;


连接可以,但是数据传不过去,c服务端提示sock读失败,请问可能是什么方面的原因呢?
谢谢!

P.S. 去掉后面的recv,是可以读成功的。

'svr_ip_addr:port' 这也能连接的起来?!

p.s. 英语错误:data本身已经是复数形式了,岂能再加s?
楼上的真逗哈,我只是形象化了而已,不过还是谢谢Nosferatu!
my $socket= new IO::Socket::INET(
              PeerAddr => "$IP_ADDRESS",
              PeerPort => "$SOCKET_PORT",
              Proto => "tcp",
              Timeout => 20,
              Type => SOCK_STREAM) || die "$!";
  local $| =1; #--open autofluse
看了源代码,new函数里是有autoflush的,另外错误值应该由$@获得,我一开始也搞错了,谢谢apile!

c服务端读的时候可以读到正确内容,但是如果客户端后面加了recv后,服务端sock读函数返回值为-1(出错,但是读取内容是正确的),不太清楚这种情况是怎么回事,5555,是不是io::socket不支持与c的接口呢?  有没有老大遇到过此类情况?
上面的确是我写错. $@....

C的udp socket server不会写...没办法帮你..

猜测..有没有可能是因为C的string最後一码是 \0...你没有补上去?
或者收到了什麽看不见的char.....
不清楚...


QUOTE:
原帖由 apile 于 2008-1-8 15:48 发表
上面的确是我写错. $@....

C的udp socket server不会写...没办法帮你..

猜测..有没有可能是因为C的string最後一码是 \0...你没有补上去?
或者收到了什麽看不见的char.....
不清楚...

老大说的有道理阿,你看到的内容不一定是真正正确的,毕竟函数返回值摆在那儿呢
试试看检查下c的代码吧,socket的机制都是一样的,跟perl模块没关系
你们说的应该是正确的,后来改成Socket模块也还是同样的原因,最后找了hoowa帮我查觉得可能是接收的内容不一样。c服务端接收为一个数组,但这边传过去很显然有两个问题:一个是长度,另一个就是\0问题。很土的找了几种方法来人为模拟\0并补齐长度,但是好像都不太管用(笨啊)。因为着急用,改用c了,已经实现,回来结帖

再次感谢apile与Nosferatu!