利用socket传图片,可以在局域网内通过客户端向服务端发送图片,同样的也可以互相传输一些数据。代码如下:
客户端代码:client.php
/* client.php */
<?php
$filePath = "E:\\PHP\\image\\"; //设置图片所在的路径
$fileName = "jjj.jpg"; //要上传的图片
$fp = fsockopen("127.0.0.1", 1500, $errno, $errstr, 30); //创建一个网络套接字,ip地址以及端口号要与服务器ip及端口号一致
if (is_resource($fp)) {
$fileSize = filesize($filePath . $fileName); //检查文件大小
$out = file_get_contents($filePath . $fileName); //把要发送的图片转成二进制图片流
$receiveFileSize = fwrite($fp, $out); //发送文件
echo 'send success';
} else {
echo 'data uncomplete!';
}
fclose($fp); //关闭文件
服务端代码:server.php
/* server.php */
<?php
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); //创建套接字
socket_bind($socket, '127.0.0.1', 1500); //绑定ip地址和端口号
socket_listen($socket); //监听端口
//初始化一个数据,和客户端通信
$buffer = "connent";
while (true) {
$connection = socket_accept($socket); //接收套接字的信息
if (!$connection){
echo "connent fail";
}else{
echo "Socket connent\n";
if ($buffer != ""){
echo "send data to client\n";
socket_write($connection, $buffer . "\n");
echo "Wrote to socket\n";
}else {
echo "no data in the buffer\n" ;
}
$datas = ""; //初始化数据
while ($flag = @socket_recv($connection, $data, 15360, 0)){ //socket_recv()函数,从$connection里读取数据信息,存入$data
$datas = $datas.$data; //数据叠加
}
print_r(strlen($datas)).PHP_EOL; //打印数据大小
date_default_timezone_set('Asia/Shanghai'); //设置时区
$name = date('YmdHis',time()); //以时间为文件名
file_put_contents("$name.jpg", $datas); //该函数解析二进制数据
}
socket_close($connection); // 关闭套接字
}
?>
代码就编写完成了。之后就是运行代码了。
用cmd命令窗口运行代码
客户端运行
服务端结果
然后文件就存下来了
那些在命令窗口说php不是内部命令的,是因为在环境变量中没有设置。设置php环境变量的方法可以去百度一下,有很多的方法的。