免费注册 查看新帖 |

Chinaunix

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

socket問題 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-08-23 07:03 |只看该作者 |倒序浏览
本帖最后由 fr222093 于 2013-08-23 11:25 编辑

小弟初學,想把a電腦 ip 傳給 b電腦打印。出現錯誤『Use of uninitialized value $addr in print at ./2.pl line 23.』~~請高手指導,感謝。 。

A-PC
====================================================
#! /usr/bin/perl -w
use strict;
use IO::Socket;
my $socket = IO::Socket::INET->new(PeerAddr => '192.168.1.1' ,PeerPort => '2011',Proto => 'tcp')
or die "$!";
my $new_socket = $socket->accept();
host_ip($new_socket);

sub host_ip{
my $addr = `ifconfig eth0|grep inet`;
$addr =~ /(\d+\.\d+\.\d+\.\d+)/;
my $ip = $1;
print $ip;
}
close $new_socket;
====================================================

B-PC
====================================================
#! /usr/bin/perl -w
use strict;
use warnings;
use IO::Socket;
my $quit = 0;
$SIG{INT} = sub {$quit++};

my $socket = new IO::Socket::INET (
        LocalHost => '192.168.1.1',
        LocalPort => '2011',
        Proto => 'tcp',
        Listen => 1,
        Reuse => 1,
) || die ("无法创建socket:$!\n");
warn " wait prot..\n";
while (!$quit){
next unless my $session = $socket->accept();
my $ip = $session->peerhost;
warn "[$ip]\n";
my($addr);
$addr = <$session>;
print $addr;
close $session;
}
============================================

论坛徽章:
1
操作系统版块每日发帖之星
日期:2016-06-12 06:20:00
2 [报告]
发表于 2013-08-23 11:36 |只看该作者
本帖最后由 yakczh_cu 于 2013-08-23 11:38 编辑

B-PC
  1. use strict;
  2. use warnings;
  3. use IO::Socket;
  4. use Thread;

  5. my $quit = 0;
  6. $SIG{INT} = sub {$quit++};
  7. sub talk{
  8.         my $session =shift;
  9.         while(1){
  10.                 my $line = <STDIN>;
  11.                 if($line eq  'quit'){
  12.                         print "Bye Bye/n";
  13.                         close $session;
  14.                 }else{
  15.                         print $session ":".$line;
  16.                 }
  17.                 sleep(1);
  18.         }
  19. }
  20. sub receive{

  21.         my $session=shift;
  22.         while(1){
  23.         print $session "\r".$session->peerhost;

  24.                 my $remote_pack_address=$session->recv(my $buffer,10,0);
  25.                 print $buffer;
  26.                 sleep(1);
  27.         }
  28. }
  29. my $socket = new IO::Socket::INET (
  30. LocalHost => '192.168.1.101',
  31. LocalPort => '2011',
  32. Proto => 'tcp',
  33. Listen => 1,
  34. Reuse => 1,
  35. ) || die ("无法创建socket:$!\n");
  36. warn " waiting for connection ..\n";
  37. while (!$quit){
  38.         next unless my $session = $socket->accept();
  39.         my $ip = $session->peerhost;
  40.         warn "[$ip] incoming! \n";
  41.         my $thread2=Thread->new(\&talk,$session);
  42.         my $thread1=Thread->new(\&receive,$session);
  43.         $thread2->join();
  44.         $thread1->join();  

  45. }
复制代码
A-PC
  1. #! /us/bin/perl -w
  2. use strict;
  3. use IO::Socket;
  4. use Data::Dumper;
  5. use Thread;

  6. sub receive{

  7.         my $session=shift;
  8.         while(1){
  9.                 print $session "\r".$session->peerhost;# my $answer=<$session>;
  10.                 my $buffer;
  11.                 my $remote_pack_address=$session->recv($buffer,10,0);
  12.                 print $buffer;
  13.                 sleep(1);
  14.         }
  15. }

  16. sub talk{
  17.         my $session =shift;
  18.         while(1){
  19.                 my $line = <STDIN>;
  20.                 if($line eq  'quit'){
  21.                         print "Bye Bye/n";
  22.                         close $session;
  23.                 }else{
  24.                         print $session ":".$line;
  25.                 }
  26.                 sleep(1);
  27.         }
  28. }

  29. sub host_ip{

  30.         my $socket = shift;
  31.         my $thread1=Thread->new(\&talk,$socket);
  32.         my $thread2=Thread->new(\&receive,$socket);
  33.         $thread1->join();
  34.         $thread2->join();  

  35. }

  36. my $new_socket = IO::Socket::INET->new(Reuse => 1,Proto => 'tcp',PeerAddr => '192.168.1.101' ,PeerPort => '2011')
  37. or die "$!";  
  38. host_ip($new_socket);
复制代码

论坛徽章:
0
3 [报告]
发表于 2013-08-25 00:19 |只看该作者
回复 2# yakczh_cu
感謝大哥的回覆~~小弟請教一下 一定要用手動輸入ip 才能傳嗎? 不能用正則匹配完以後在傳送嗎? 我失敗的文件是送過去的值未初始化。幫忙小弟 感謝。

   

论坛徽章:
3
未羊
日期:2013-11-18 15:17:06酉鸡
日期:2013-12-06 17:07:16天蝎座
日期:2014-06-11 12:37:07
4 [报告]
发表于 2013-08-25 00:35 |只看该作者
必须要手动输入IP才能传,因为不知道目标地址没法传送的啊。。
Socket是连接双方的纽带。。

论坛徽章:
3
未羊
日期:2013-11-18 15:17:06酉鸡
日期:2013-12-06 17:07:16天蝎座
日期:2014-06-11 12:37:07
5 [报告]
发表于 2013-08-25 00:36 |只看该作者
给个比较好的方法你,你可以先在本地建设个环境,安装NC,然后监听。
再写个发SOCKET的脚本,把数据发射出来,NC就能看到你自己的数据了。

论坛徽章:
0
6 [报告]
发表于 2013-08-25 09:03 |只看该作者
回复 2# yakczh_cu
感謝大哥的回覆~~小弟請教一下 一定要用手動輸入ip 才能傳嗎? 不能用正則匹配完以後在傳送嗎? 我失敗的文件是送過去的值未初始化。幫忙小弟 感謝。

   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP