免费注册 查看新帖 |

Chinaunix

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

借人气问xinetd的超级疑惑 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-10-13 11:44 |只看该作者 |倒序浏览
下面是我建立一个xinetd监听端口,并把接收到的字符串写入文件。
下面是用perl写的一个程序,其实我用c写同样功能的程序也存在同样的问题(后面会说到)

  1. #!/usr/bin/perl -w

  2. use strict;

  3. open(FP,">;>;/home/chenwb/perl/file");
  4. my $line=<STDIN>;;
  5. print FP "$line";
  6. close(FP);


  7. 建立/etc/xinetd.d/hellogod
  8. [code]
  9. service hellogod
  10. {
  11.         socket_type     =stream
  12.         protocol        =tcp
  13.         wait            =no
  14.         user            =root
  15.         server          =/home/chenwb/perl/hello.pl
  16.         disable = no
  17. }
复制代码

在/etc/services里添加一行:
hellogod        23456/tcp                       #/home/chenwb/perl/hello.pl

问题是我通过其他机器用指令telnet到本机(ip 192.168.2.13)
echo "good day" | telnet 192.168.2.13 23456
就能写入到文件file里

而在本机上通过指令:
echo "good day" | telnet 192.168.2.13 23456
或者echo "good day" | telnet localhost 23456
或者echo "good day" | telnet 127.0.0.1 23456

都没有写入到文件file里(准确说应该是大多数时候是写不进去,有时也能写入)

论坛徽章:
0
2 [报告]
发表于 2005-10-13 12:13 |只看该作者

借人气问xinetd的超级疑惑

原帖由 "whizchen" 发表:
!/usr/bin/perl -w

use strict;

open(FP,">;>;/home/chenwb/perl/file";
my $line=<STDIN>;;
print FP "$line";
close(FP);


建立/etc/xinetd.d/hellogod
[code]
service hellogod..........


so strange! 这样写:

use strict;
my $line=<STDIN>;;
print $line;
warn $line;


再从本机:
telnet 127.0.0.1 port
input something...


看看能否收到屏幕输出?
如果有输出的话,就说明server端接受到数据了。

论坛徽章:
0
3 [报告]
发表于 2005-10-13 12:22 |只看该作者

借人气问xinetd的超级疑惑

没有修改程序,按楼上的测试方法,可以得到结果如下:

  1. [root@FrontCheckServer perl]# telnet 127.0.0.1 23456
  2. Trying 127.0.0.1...
  3. Connected to localhost.localdomain (127.0.0.1).
  4. Escape character is '^]'.
  5. receive good!
  6. Connection closed by foreign host.
  7. [root@FrontCheckServer perl]# ls
  8. file  hello.pl
  9. [root@FrontCheckServer perl]# cat file
  10. receive good!
复制代码

论坛徽章:
0
4 [报告]
发表于 2005-10-13 12:36 |只看该作者

借人气问xinetd的超级疑惑

[quote]原帖由 "whizchen"][/quote 发表:


偶明白了,这样写:
  1. open(FP,">;>;/home/chenwb/perl/file");
  2. select FP;$|=1;select STDOUT;
复制代码

论坛徽章:
0
5 [报告]
发表于 2005-10-13 13:09 |只看该作者

借人气问xinetd的超级疑惑

搭车问一下,The Perl Programming Language有中译本吗?我在china-pub没找到;若没有,能给我推荐基本经典图书吗?

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
6 [报告]
发表于 2005-10-13 13:22 |只看该作者

借人气问xinetd的超级疑惑

1.Programming Perl当然有中文罗...
2.楼主的问题..应该在於tcp的buffer...
一般tcp ip再做完three way handle shaking之後...就开始传送资料...
client与server处各会有一个buffer...
兰花仙子的作法是吧..buffer给auto flush...这样子不管什麽string
server端的buffer都会flush给对应的program...

一般buffer 会把资料送给程序,有三种情形:
1.碰到$/ 定义的char..会送给program..$/ 代表的是eol...
2.碰到eof...会送给program,同时close connection
3.buffer满了...会自动送给program...
所以在做tcp的server的时候 autoflush最好是设定为1..
这样才比较不会有问题...

论坛徽章:
0
7 [报告]
发表于 2005-10-13 13:52 |只看该作者

借人气问xinetd的超级疑惑

[quote]原帖由 "albcamus"]搭车问一下,The Perl Programming Language有中译本吗?我在china-pub没找到;若没有,能给我推荐基本经典图书吗?[/quote 发表:


偶入门看的是<learning perl>;这本书,偶有e文的,若需要,偶发给你。

论坛徽章:
0
8 [报告]
发表于 2005-10-13 16:47 |只看该作者

借人气问xinetd的超级疑惑

原帖由 "apile" 发表:
1.Programming Perl当然有中文罗...
2.楼主的问题..应该在於tcp的buffer...
一般tcp ip再做完three way handle shaking之後...就开始传送资料...
client与server处各会有一个buffer...
兰花仙子的作法是吧..buff..........


呵呵,看了过后,大概知道可能是和三次握手有关系。
但是不知道该怎么改?
可能是perl学习得不够好吧!
我加了兰花仙子给的:
select FP;$|=1;select STDOUT;

不是很理解,不过还是不行!

真的很疑惑!

论坛徽章:
0
9 [报告]
发表于 2005-10-14 20:48 |只看该作者

借人气问xinetd的超级疑惑

原帖由 "whizchen" 发表:


呵呵,看了过后,大概知道可能是和三次握手有关系。
但是不知道该怎么改?
可能是perl学习得不够好吧!
我加了兰花仙子给的:
select FP;$|=1;select STDOUT;

不是很理解,不过还是不行!

真的很疑惑!

我加了兰花仙子给的:
select FP;$|=1;select STDOUT;

不是很理解,不过还是不行!


$|=1就是关掉I/O缓存嘛。
你的问题不在三次握手哦。
xinetd的协议连接实现得很好的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP