免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2585 | 回复: 7
打印 上一主题 下一主题

请教io::socket::net [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-01-07 18:44 |只看该作者 |倒序浏览
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,是可以读成功的。

[ 本帖最后由 truemyself 于 2008-1-7 22:20 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2008-01-07 20:13 |只看该作者
'svr_ip_addr:port' 这也能连接的起来?!

p.s. 英语错误:data本身已经是复数形式了,岂能再加s?

论坛徽章:
0
3 [报告]
发表于 2008-01-07 20:24 |只看该作者
楼上的真逗哈,我只是形象化了而已,不过还是谢谢Nosferatu!

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
4 [报告]
发表于 2008-01-08 08:25 |只看该作者
my $socket= new IO::Socket::INET(
              PeerAddr => "$IP_ADDRESS",
              PeerPort => "$SOCKET_PORT",
              Proto => "tcp",
              Timeout => 20,
              Type => SOCK_STREAM) || die "$!";
  local $| =1; #--open autofluse

论坛徽章:
0
5 [报告]
发表于 2008-01-08 10:57 |只看该作者
看了源代码,new函数里是有autoflush的,另外错误值应该由$@获得,我一开始也搞错了,谢谢apile!

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

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
6 [报告]
发表于 2008-01-08 15:48 |只看该作者
上面的确是我写错. $@....

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

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

论坛徽章:
0
7 [报告]
发表于 2008-01-08 17:03 |只看该作者
原帖由 apile 于 2008-1-8 15:48 发表
上面的确是我写错. $@....

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

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


老大说的有道理阿,你看到的内容不一定是真正正确的,毕竟函数返回值摆在那儿呢
试试看检查下c的代码吧,socket的机制都是一样的,跟perl模块没关系

论坛徽章:
0
8 [报告]
发表于 2008-01-08 20:17 |只看该作者
你们说的应该是正确的,后来改成Socket模块也还是同样的原因,最后找了hoowa帮我查觉得可能是接收的内容不一样。c服务端接收为一个数组,但这边传过去很显然有两个问题:一个是长度,另一个就是\0问题。很土的找了几种方法来人为模拟\0并补齐长度,但是好像都不太管用(笨啊)。因为着急用,改用c了,已经实现,回来结帖

再次感谢apile与Nosferatu!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP