stream_socket_server

24 篇文章 0 订阅

PHP 5)

stream_socket_server - 创建一个Internet或Unix域服务器套接字

描述

资源 stream_socket_server(字符串local_socket [摘要和错误号[,串errstr [摘要标志[,资源环境]]]])

创建指定流或数据报套接字 local_socket。:该类型创建由运输决定的插座的使用标准URL格式指定 运输://目标。对于Internet域套接字(AF_INET),如TCP和UDP,该目标的一部分remote_socket参数应该由一个主机名或IP地址,后跟一个冒号和一个端口号。对于Unix域套接字,该目标部分应指向文件系统上的套接字文件。 标志是可被设置为套接字创建标记的任何组合的位掩码字段。标志的默认值为 STREAM_SERVER_BIND | STREAM_SERVER_LISTEN

注: 对于UDP套接字,必须使用STREAM_SERVER_BIND作为标志参数。

此功能仅创建一个套接字,开始接受连接使用stream_socket_accept() 

如果调用失败,它将返回FALSE,如果可选 的errnoerrstr 参数是目前他们将被设置为表明发生在系统级实际的系统级错误 插座() bind()的,和 听()调用。如果返回值 错误号0和该函数返回FALSE,那就是前发生的错误指示bind()的调用。这很可能是由于在初始化插座的问题。请注意,错误号和 errstr参数将始终通过引用传递。

根据环境的不同,Unix域套接字可能无法使用。可用传输列表可以使用检索 stream_get_transports() 。见 附录Ñ为bulitin传输的列表。

例子 1. Using TCP server sockets

<?php
$socket 
stream_socket_server("tcp://0.0.0.0:8000"$errno$errstr);
if (!
$socket) {
  echo 
"$errstr ($errno)<br />\n";
} else {
  while (
$conn stream_socket_accept($socket)) {
    
fwrite($conn'The local time is ' date('n/j/Y g:i a') . "\n");
    
fclose($conn);
  }
  
fclose($socket);
}
?>

下面的例子演示了如何作为,可以如图为例对时间响应查询的时间服务器在stream_socket_client() 

注: 大多数系统需要root权限以低于1024的端口上创建服务器套接字。

例子 2. Using UDP server sockets

<?php
$socket 
stream_socket_server("udp://127.0.0.1:1113"$errno$errstrSTREAM_SERVER_BIND);
if (!
$socket) {
    die(
"$errstr ($errno)");
}

do {
    
$pkt stream_socket_recvfrom($socket10$peer);
    echo 
"$peer\n";
    
stream_socket_sendto($socketdate("D M j H:i:s Y\r\n"), 0$peer);
} while (
$pkt !== false);

?>

注: 当指定数字的 IPv6 地址(例如 fe80::1)时必须将 IP 地址放在方括号内。例如 tcp://[fe80::1]:80

也参见在stream_socket_client() , stream_set_blocking() , stream_set_timeout() , 与fgets() , fgetss() fwrite()将, FCLOSE() 的feof() ,和卷曲延伸


参考链接: http://www.kuqin.com/php5_doc/function.stream-socket-server.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,对于这个代码,我们可以将其封装成一个函数,实现保存多张照片的功能。具体来说,可以使用一个循环,在每次接收到客户端发送的图片数据时,将其保存为一个新的文件。下面是一个可能的实现: ```python import socket def receive_images(server_ip, server_port, save_dir='images'): server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server_socket.bind((server_ip, server_port)) server_socket.listen(1) print('等待客户端连接...') client_socket, client_address = server_socket.accept() print('客户端已连接:', client_address) i = 0 while True: filename = f'{save_dir}/image_{i}.jpg' with open(filename, 'wb') as f: while True: data = client_socket.recv(1024) if not data: break f.write(data) print(f'图片已保存为{filename}') i += 1 client_socket.close() server_socket.close() ``` 在这个函数中,我们新增了一个 `save_dir` 参数,用于指定保存图片的目录。然后在循环中,使用一个计数器 `i` 来表示文件名中的序号,以便保存多张照片。具体来说,每次循环时,都将文件名设置为 `images/image_i.jpg`,并将图片数据写入到这个文件中。最后,每次循环结束后,计数器 `i` 增加 1,以便保存下一张照片。 需要注意的是,由于这个函数是一个死循环,需要手动终止,因此可能需要在循环中加入一些条件判断,以便在满足某些条件时可以退出循环。另外,如果有多个客户端同时连接,可能需要对函数进行一些修改,以便同时处理多个客户端发送的数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值