如何在套接字编程中连续监听来自服务器(server.java)套接字的PHP(client.php)套接字
how to continuously listen PHP(client.php) socket from Server(server.java)socket in socket programming
我正在使用套接字编程,我的服务器套接字在 java 中,我的客户端程序在 php 中。这里 server.java 正在连续发送数据(运行 在命令提示符下)。建立连接后,我只在浏览器上收到一次服务器对 client.php 的响应。
这里的问题是,我想在client.php(在浏览器上显示)上连续显示数据。
client.php
<?php
$host = "192.168.1.10";
$port = 4444;
$message = "Hello Server";
echo "Message To server :".$message;
while (true) {
// create socket
$socket = socket_create(AF_INET, SOCK_STREAM, 0) or die("Could not create socket\n");
// connect to server
$result = socket_connect($socket, $host, $port) or die("Could not connect to server\n");
// send string to server
socket_write($socket, $message, strlen($message)) or die("Could not send data to server\n");
// get server response
$result = socket_read ($socket, 1024) or die("Could not read server response\n");
echo "Reply From Server :".$result ."<br>";
}
?>
您的服务器实现似乎无法处理多个客户端连接。
尝试在 while 循环之外调用 socket_create 和 socket_connect 一次
您正在循环中重新创建套接字。第二次重新创建套接字时,旧连接似乎没有被正确删除,因此 returns 出错。
只需将 while 循环移动到 socket_write 调用上方即可。
我通过 nc 使用命令行中的脚本侦听端口 4444 对此进行了测试,并且能够与服务器通信。
客户端代码:
// create socket
$socket = socket_create(AF_INET, SOCK_STREAM, 0) or die("Could not create socket\n");
// connect to server
$result = socket_connect($socket, $host, $port) or die("Could not connect to server\n");
while (true) {
// send string to server
socket_write($socket, $message, strlen($message)) or die("Could not send data to server\n");
// get server response
$result = socket_read ($socket, 1024) or die("Could not read server response\n");
echo "Reply From Server :".$result ."\n";
}
?>
服务器:
cat - | nc -l 172.16.1.1 4444
能够简单地输入任意服务器响应。
我找到了解决方案。服务器不断监听客户端套接字并发送消息。只是我需要在 browser.Now 解决方案上显示:我正在自动刷新 client.php 套接字。我不认为这是否是正确的方法。但输出正符合我的预期。
Client.php
<?php
$host = "192.168.1.10";
$port = 4444;
$message = "Hello Server";
echo "Message To server :".$message;
// create socket
$socket = socket_create(AF_INET, SOCK_STREAM, 0) or die("Could not create socket\n");
// connect to server
$result = socket_connect($socket, $host, $port) or die("Could not connect to server\n");
// send string to server
if($result) {
socket_write($socket, $message, strlen($message)) or die("Could not send data to server\n");
// get server response
$result = socket_read ($socket, 1024) or die("Could not read server response\n");
}
echo "Reply From Server :".$result ."<br>";
// close socket
//socket_close($socket);
$url1=$_SERVER['REQUEST_URI'];
header("Refresh: 1; URL=$url1");
?>
我正在使用套接字编程,我的服务器套接字在 java 中,我的客户端程序在 php 中。这里 server.java 正在连续发送数据(运行 在命令提示符下)。建立连接后,我只在浏览器上收到一次服务器对 client.php 的响应。
这里的问题是,我想在client.php(在浏览器上显示)上连续显示数据。
client.php
<?php
$host = "192.168.1.10";
$port = 4444;
$message = "Hello Server";
echo "Message To server :".$message;
while (true) {
// create socket
$socket = socket_create(AF_INET, SOCK_STREAM, 0) or die("Could not create socket\n");
// connect to server
$result = socket_connect($socket, $host, $port) or die("Could not connect to server\n");
// send string to server
socket_write($socket, $message, strlen($message)) or die("Could not send data to server\n");
// get server response
$result = socket_read ($socket, 1024) or die("Could not read server response\n");
echo "Reply From Server :".$result ."<br>";
}
?>
您的服务器实现似乎无法处理多个客户端连接。
尝试在 while 循环之外调用 socket_create 和 socket_connect 一次
您正在循环中重新创建套接字。第二次重新创建套接字时,旧连接似乎没有被正确删除,因此 returns 出错。
只需将 while 循环移动到 socket_write 调用上方即可。
我通过 nc 使用命令行中的脚本侦听端口 4444 对此进行了测试,并且能够与服务器通信。
客户端代码:
// create socket
$socket = socket_create(AF_INET, SOCK_STREAM, 0) or die("Could not create socket\n");
// connect to server
$result = socket_connect($socket, $host, $port) or die("Could not connect to server\n");
while (true) {
// send string to server
socket_write($socket, $message, strlen($message)) or die("Could not send data to server\n");
// get server response
$result = socket_read ($socket, 1024) or die("Could not read server response\n");
echo "Reply From Server :".$result ."\n";
}
?>
服务器:
cat - | nc -l 172.16.1.1 4444
能够简单地输入任意服务器响应。
我找到了解决方案。服务器不断监听客户端套接字并发送消息。只是我需要在 browser.Now 解决方案上显示:我正在自动刷新 client.php 套接字。我不认为这是否是正确的方法。但输出正符合我的预期。
Client.php
<?php
$host = "192.168.1.10";
$port = 4444;
$message = "Hello Server";
echo "Message To server :".$message;
// create socket
$socket = socket_create(AF_INET, SOCK_STREAM, 0) or die("Could not create socket\n");
// connect to server
$result = socket_connect($socket, $host, $port) or die("Could not connect to server\n");
// send string to server
if($result) {
socket_write($socket, $message, strlen($message)) or die("Could not send data to server\n");
// get server response
$result = socket_read ($socket, 1024) or die("Could not read server response\n");
}
echo "Reply From Server :".$result ."<br>";
// close socket
//socket_close($socket);
$url1=$_SERVER['REQUEST_URI'];
header("Refresh: 1; URL=$url1");
?>