socket = socket_create(AF_INET, SOCK_STREAM, 0); $this->isOpened = socket_connect($this->socket,$host,$port); $this->host = $host; $this->port = $port; socket_set_block($this->socket); } public function send(array $data) : bool{ if( !$this->isOpened ) return false; $toSend = json_encode($data); $size = strlen($toSend); socket_write($this->socket,pack('N',$size)); $success = socket_write($this->socket,$toSend); return $success == $size; } public function receive() : array{ $size = 0; while($size == 0){ $size = unpack("N",socket_read($this->socket,4))[1]; } $read = 0; $data = ""; $tmp = ""; while($read != $size){ $remaining = ($size - $read); $read += socket_recv($this->socket,$tmp,$remaining,MSG_DONTWAIT); $data .= $tmp; } return json_decode($data,true); } public function close(){ socket_shutdown($this->socket); socket_close($this->socket); } }