免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3359 | 回复: 6

Socket编程的问题(Perl & Ruby) [复制链接]

论坛徽章:
0
发表于 2011-05-31 00:23 |显示全部楼层
有下面两段Perl代码和两段Ruby代码:

Code A: 【Perl TCP Server】

  1. prompt> perl -e '
  2. use IO::Socket;

  3. $s = IO::Socket::INET->new(LocalPort => 8080, Type => SOCK_STREAM, Reuse => 1, Listen => 10, Proto => "tcp") or die "$!";
  4. while ($c = $s->accept) {
  5.    print while <$c>;
  6. }'
复制代码
Code B:【Perl TCP Client】

  1. prompt> perl -e '
  2. use IO::Socket;

  3. $c = IO::Socket::INET->new(PeerAddr => "localhost:8080") or die "$!";
  4. while (<>) {
  5.   print $c $_
  6. }'
复制代码
Code C:【Ruby TCP Server】

  1. prompt> ruby -e '
  2. require "socket"

  3. s = TCPServer.new("localhost", 8080)
  4. while( c = s.accept)
  5.   while l = c.gets
  6.   puts l
  7. end
  8. end'
复制代码
Code D:【Ruby TCP Client】

  1. prompt> ruby -e '
  2. require "socket"

  3. c = TCPSocket.new("localhost", 8080)
  4. while l = gets
  5.   c.puts l
  6. end'
复制代码
有以下一些问题,我感觉很困惑,哪位大虾能帮忙解释一下

1. Code A和Code C能同时运行,按理说都绑在TCP8080端口上,后启动一个程序应该抛出Address already be used之类的信息才对啊
2. 可以同时运行两个Code C实例,但不能同时运行两个Code A实例
3. Code A和Code C同时运行时,使用Google Chrome浏览器访问http://localhost:8080/,只有Code C实例能打印出HTTP message,而Code A和Code C分别单独运行时, 都能打印出HTTP Message
4. Code C单独运行时,Code B无法连接到Code C实例
5. Code A单独运行时,Code D可以连接到Code A实例
6. Code A和Code C同时运行时,Code B连接到Code A实例,而Code D连接到Code C实例。

论坛徽章:
0
发表于 2011-05-31 02:12 |显示全部楼层
太悲催了,貌似是因为这几个进程绑定在不同的hostname上了

  1. liuxiang@MacBookPro: ~/casecode/java/socket $ lsof -i :8080
  2. COMMAND     PID     USER   FD   TYPE     DEVICE SIZE/OFF NODE NAME
  3. ruby      78309 liuxiang    3u  IPv6 0x190205c0      0t0  TCP localhost:http-alt (LISTEN)
  4. perl5.10. 78351 liuxiang    3u  IPv4 0x122be2f8      0t0  TCP adobe-dns-2.adobe.com:http-alt (LISTEN)
  5. java      78352 liuxiang   28u  IPv6 0x164ecd10      0t0  TCP *:http-alt (LISTEN)
复制代码
adobe-dns-2.adobe.com也指向127.0.0.1

论坛徽章:
0
发表于 2011-05-31 06:09 |显示全部楼层
回复 2# lululau


    呃,你这是破解Adobe的东东?

论坛徽章:
0
发表于 2011-05-31 08:40 |显示全部楼层
回复 3# 2gua


    gua是起得太早,还是睡得太晚啊。

论坛徽章:
0
发表于 2011-05-31 09:19 |显示全部楼层
有下面两段Perl代码和两段Ruby代码:

Code A: 【Perl TCP Server】Code B:【Perl TCP Client】Code C: ...
lululau 发表于 2011-05-31 00:23



    不管perl还是ruby,其socket都是对C Socket库的赤裸裸的封装。

论坛徽章:
46
15-16赛季CBA联赛之四川
日期:2018-03-27 11:59:132015年亚洲杯之沙特阿拉伯
日期:2015-04-11 17:31:45天蝎座
日期:2015-03-25 16:56:49双鱼座
日期:2015-03-25 16:56:30摩羯座
日期:2015-03-25 16:56:09巳蛇
日期:2015-03-25 16:55:30卯兔
日期:2015-03-25 16:54:29子鼠
日期:2015-03-25 16:53:59申猴
日期:2015-03-25 16:53:29寅虎
日期:2015-03-25 16:52:29羊年新春福章
日期:2015-03-25 16:51:212015亚冠之布里斯班狮吼
日期:2015-07-13 10:44:56
发表于 2011-05-31 09:24 |显示全部楼层
刘翔@MacBookPro

论坛徽章:
0
发表于 2011-05-31 12:43 |显示全部楼层
回复  2gua


    gua是起得太早,还是睡得太晚啊。
kingwmj 发表于 2011-05-31 08:40



    被蚊子咬醒。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP