Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在php和perl之间发送和接收数据时出现问题?_Php_Perl - Fatal编程技术网

在php和perl之间发送和接收数据时出现问题?

在php和perl之间发送和接收数据时出现问题?,php,perl,Php,Perl,我在php和perl套接字之间发送和接收数据时遇到问题: -问题: php无法将所有字节数据发送到perl套接字 Perl套接字无法从php接收所有数据 下面是php代码: function save(){ unset($_SESSION['info']); unset($_SESSION['data']); global $config,$ip; $start=$_POST['config']; $fp = fsockopen($_SESS

我在php和perl套接字之间发送和接收数据时遇到问题:

-问题:

  • php无法将所有字节数据发送到perl套接字
  • Perl套接字无法从php接收所有数据
下面是php代码:

function save(){ 
    unset($_SESSION['info']); 
    unset($_SESSION['data']); 
    global $config,$ip; 
    $start=$_POST['config']; 
    $fp = fsockopen($_SESSION['ip'], $config['port'], $errno, $errstr, 30); 
    if(!$fp) { 
        $_SESSION['info']="Not connect "; 
        transfer("Not   connect".$ip, "index.php?com=server&act=info"); 
    } else { 
        $_SESSION['info']="Save config - ".$ip; 
        fwrite($fp,$start); 
        transfer("Sending data to ".$ip, "index.php?com=server&act=info");    
    } 
}
下面是perl套接字代码:

#!/usr/bin/perl 
use strict; 
use warnings; 
use Carp; 
use POSIX qw( setsid ); 

use IO::Socket; 

$| = 1; 

my $socket = new IO::Socket::INET ( 
                              LocalHost => '192.168.150.3', 
                              LocalPort => '5000', 
                              Proto => 'tcp', 
                              Listen => 5, 
                              Reuse => 1 
                           ); 
die "Coudn't open socket" unless $socket; 
print "\nTCPServer Waiting for client on port 5000"; 
my $client_socket = ""; 
while ($client_socket = $socket->accept()) { 
    my $recieved_data =" "; 
    my $send_data=" "; 
    my $peer_address = $client_socket->peerhost(); 
    my $peer_port = $client_socket->peerport(); 
    print "\n I got a connection from ( $peer_address , $peer_port ) "; 
    print "\n SEND( TYPE q or Q to Quit):"; 
    $client_socket->recv($recieved_data,20000); 
    #while (defined($recieved_data = <$client_socket>)) { 
        if ( $recieved_data eq 'q' or $recieved_data eq 'Q' ) { 
            close $client_socket; 
            last; 
        } 
        elsif ($recieved_data eq 'start' or $recieved_data eq 'START' ) { 
            $send_data = `/etc/init.d/squid start`; 
        } 
        elsif ($recieved_data eq 'restart' or $recieved_data eq 'RESTART' ) { 
            $send_data =  `/etc/init.d/squid restart`; 
        } 
        elsif ($recieved_data eq 'stop' or $recieved_data eq 'STOP' ) { 
            $send_data =  `/etc/init.d/squid stop`; 
        } 
        elsif ($recieved_data eq 'hostname' or $recieved_data eq 'HOSTNAME' ) {
            $send_data= `hostname`; 
        } 
        elsif ($recieved_data eq 'view-config' or $recieved_data eq 'VIEW-CONFIG' ) { 
            $send_data = `cat /etc/squid/squid.conf` ; 
        } 
        else { 
            #print  $recieved_data; 
            open OUTPUT_FILE, '> /root/data' or die("can not open file"); 
            print OUTPUT_FILE $recieved_data; 
            close OUTPUT_FILE 
        } 
    #} 
    if ($send_data eq 'q' or $send_data eq 'Q') { 
        $client_socket->send ($send_data); 
        close $client_socket; 
        last; 
    } 
    else { 
        $client_socket->send($send_data); 
    } 
}
#/usr/bin/perl
严格使用;
使用警告;
使用鲤鱼;
使用POSIX qw(设置ID);
使用IO::Socket;
$| = 1; 
my$socket=新IO::socket::INET(
LocalHost=>'192.168.150.3',
LocalPort=>“5000”,
Proto=>“tcp”,
听着=>5,
重用=>1
); 
除非$socket,否则模具“无法打开插座”;
打印“\nTCPServer正在端口5000上等待客户端”;
我的$client_socket=“”;
而($client_socket=$socket->accept()){
我的$received_data=“”;
我的$send_data=“”;
my$peer_address=$client_socket->peerhost();
my$peer_port=$client_socket->peerport();
打印“\n我从($peer\u地址,$peer\u端口)获得连接”;
打印“\n发送(键入q或q退出):”;
$client_socket->recv($received_data,20000);
#而(已定义($received_data=){
如果($received_data eq'q'或$received_data eq'q'){
关闭$client_套接字;
最后;
} 
elsif($received_data eq'start'或$received_data eq'start'){
$send_data=`/etc/init.d/squid start`;
} 
elsif($Received_data eq'restart'或$Received_data eq'restart'){
$send_data=`/etc/init.d/squid restart`;
} 
elsif($received_data eq'stop'或$received_data eq'stop'){
$send_data=`/etc/init.d/squid-stop`;
} 
elsif($received_data eq'hostname'或$received_data eq'hostname')){
$send_data=`hostname`;
} 
elsif($received_data eq'view-config'或$received_data eq'view-config'){
$send_data=`cat/etc/squid/squid.conf`;
} 
否则{
#打印$received_数据;
打开输出文件“>/root/data”或die(“无法打开文件”);
打印输出文件$received\u数据;
关闭输出文件
} 
#} 
如果($send_data eq'q'或$send_data eq'q'){
$client\u socket->send($send\u data);
关闭$client_套接字;
最后;
} 
否则{
$client\u socket->send($send\u data);
} 
}

您忘记实际编写解析接收数据的代码。TCP是一种字节流协议,不保留应用程序消息边界。除非这恰好是您所需要的(这里显然没有),否则您需要在TCP之上开发和实现一个协议,以提供应用程序所需的功能。首先,您需要某种方法来找到命令的结尾。你的代码绝对不能让接收者这么做

无论协议有多简单,您都应该花时间编写协议规范。协议规范应明确规定字节级别的消息格式。协议规范应明确指定客户端在拥有完整消息时如何识别

然后,您实际上必须编写代码来实现该协议


在这种情况下,您可以简单地编写一个零字节来标记消息的结束。然后对接收器进行编码,以保持接收数据,直到它接收到一个零字节。然后,它就知道了消息之前的一切。

您忘记了实际编写解析接收数据的代码。TCP是一种字节流协议,不保留应用程序消息边界。除非这恰好是您所需要的(这里显然没有),否则您需要在TCP之上开发和实现一个协议,以提供应用程序所需的功能。首先,您需要某种方法来找到命令的结尾。你的代码绝对不能让接收者这么做

无论协议有多简单,您都应该花时间编写协议规范。协议规范应明确规定字节级别的消息格式。协议规范应明确指定客户端在拥有完整消息时如何识别

然后,您实际上必须编写代码来实现该协议


在这种情况下,您可以简单地编写一个零字节来标记消息的结束。然后对接收器进行编码,以保持接收数据,直到它接收到一个零字节。然后它就知道了所有信息。

你能解释一下你是如何知道它不起作用的吗?你看到它在做什么?到目前为止,你做了什么来追踪这个问题?你能解释一下你是如何知道它不起作用的吗?你看到它在做什么?到目前为止,你做了什么来追踪这个问题?