php socket发送,PHP: socket_create - Manual

It took some time to understand how one PHP process can communicate with another by means of unix udp sockets. Examples of 'server' and 'client' code are given below. Server is assumed to run before client starts.

'Server' code

die('The sockets extension is not loaded.');

}// create unix udp socket$socket=socket_create(AF_UNIX,SOCK_DGRAM,0);

if (!$socket)

die('Unable to create AF_UNIX socket');// same socket will be used in recv_from and send_to$server_side_sock=dirname(__FILE__)."/server.sock";

if (!socket_bind($socket,$server_side_sock))

die("Unable to bind to$server_side_sock");

while(1)// server never exits{// receive queryif (!socket_set_block($socket))

die('Unable to set blocking mode for socket');$buf='';$from='';

echo"Ready to receive...\n";// will block to wait client query$bytes_received=socket_recvfrom($socket,$buf,65536,0,$from);

if ($bytes_received== -1)

die('An error occured while receiving from the socket');

echo"Received$buffrom$from\n";$buf.="->Response";// process client query here

// send responseif (!socket_set_nonblock($socket))

die('Unable to set nonblocking mode for socket');// client side socket filename is known from client request: $from$len=strlen($buf);$bytes_sent=socket_sendto($socket,$buf,$len,0,$from);

if ($bytes_sent== -1)

die('An error occured while sending to the socket');

else if ($bytes_sent!=$len)

die($bytes_sent.' bytes have been sent instead of the '.$len.' bytes expected');

echo"Request processed\n";

}?>

'Client' code

die('The sockets extension is not loaded.');

}// create unix udp socket$socket=socket_create(AF_UNIX,SOCK_DGRAM,0);

if (!$socket)

die('Unable to create AF_UNIX socket');// same socket will be later used in recv_from

// no binding is required if you wish only send and never receive$client_side_sock=dirname(__FILE__)."/client.sock";

if (!socket_bind($socket,$client_side_sock))

die("Unable to bind to$client_side_sock");// use socket to send dataif (!socket_set_nonblock($socket))

die('Unable to set nonblocking mode for socket');// server side socket filename is known apriori$server_side_sock=dirname(__FILE__)."/server.sock";$msg="Message";$len=strlen($msg);// at this point 'server' process must be running and bound to receive from serv.sock$bytes_sent=socket_sendto($socket,$msg,$len,0,$server_side_sock);

if ($bytes_sent== -1)

die('An error occured while sending to the socket');

else if ($bytes_sent!=$len)

die($bytes_sent.' bytes have been sent instead of the '.$len.' bytes expected');// use socket to receive dataif (!socket_set_block($socket))

die('Unable to set blocking mode for socket');$buf='';$from='';// will block to wait server response$bytes_received=socket_recvfrom($socket,$buf,65536,0,$from);

if ($bytes_received== -1)

die('An error occured while receiving from the socket');

echo"Received$buffrom$from\n";// close socket and delete own .sock filesocket_close($socket);unlink($client_side_sock);

echo"Client exits\n";?>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值