Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在套接字编程中连续地从服务器(Server.java)套接字侦听PHP(client.PHP)套接字_Java_Php_Sockets - Fatal编程技术网

如何在套接字编程中连续地从服务器(Server.java)套接字侦听PHP(client.PHP)套接字

如何在套接字编程中连续地从服务器(Server.java)套接字侦听PHP(client.PHP)套接字,java,php,sockets,Java,Php,Sockets,我正在使用套接字编程,我的服务器套接字是用java编写的,我的客户端程序是用php编写的。这里server.java连续发送数据(在命令提示符下运行)。当建立连接时,我只在浏览器上获得了一次从服务器到client.php的响应 这里的问题是,我想在client.php(display on browser)上连续显示数据 client.php <?php $host = "192.168.1.10"; $port = 4444; $message = "Hello Server

我正在使用套接字编程,我的服务器套接字是用java编写的,我的客户端程序是用php编写的。这里server.java连续发送数据(在命令提示符下运行)。当建立连接时,我只在浏览器上获得了一次从服务器到client.php的响应

这里的问题是,我想在client.php(display on browser)上连续显示数据

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\u create和socket\u connect一次

在循环中重新创建套接字。当第二次重新创建套接字时,旧连接似乎没有被正确删除,因此它返回一个错误

只需将while循环移到socket\u 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

能够简单地键入任意服务器响应。

我找到了解决方案。服务器持续监听客户端套接字并发送消息。我只需要在浏览器上显示。现在解决方案:我自动刷新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");

?>