如何将我的数据包类的实例拆分为块并使用socket_sendto函数发送它们?

时间:2013-12-05 09:17:27

标签: sockets networking udp packet sendto

我有这样的包

    class Packet {
            private $DATASize;
            private $signature;
            private $version;
            private $HSIZE;
            private $SessionIDUser1;
            private $SessionIDUser2;
           }

我正在使用UDP协议。

1 个答案:

答案 0 :(得分:0)

由于此类中没有方法,您可以使用json_encode对实例进行编码,并将其作为字符串发送。在客户端只需解码和克隆。当课程有方法时,也可以做到更复杂。

示例:

//server
$p = new Packet;
socket_sendto($sock, json_encode($p), strlen($p), 0, $ip, $port);

//client
socket_recvfrom($sock, $buf, $size, 0, $ip, $port);
$p = clone json_decode($bof); //class without methods
$p = new Packet;
$p->setAs(json_decode($bof) ); //class with methods: implement this method too.

修改

现在我看到你的字段是private,所以你需要json编码的实现方法。请参阅https://stackoverflow.com/a/7005915/2075420https://stackoverflow.com/a/9942303/2075420