【发布时间】:2013-07-25 08:38:36
【问题描述】:
我想实现一些看似荒谬的事情。
我创建了一个 PHP 脚本来创建服务器套接字。我可以从 java 客户端连接到服务器套接字。
现在我想要在服务器端的某个地方维护这个套接字,以便我以后可以在需要时访问它。
但是,这里的问题是,一旦 respond() 函数终止,socket 就关闭了,Run 类中的 br.readLine() 方法接收到空行。
出于我的目的,readLine() 方法应该继续等待响应。
到目前为止我做了什么......
regsock.php (应该在哪里注册套接字)
<?php
set_time_limit(0);
$fh = fopen("reg.txt", "w");
fwrite($fh, "SERVER Starting\r\n");
$sersock = socket_create_listen(1234);
fwrite($fh, "SERVER Running\r\n");
while(true){
respond();
}
function respond(){
global $sersock, $fh;
$sock = socket_accept($sersock);
fwrite($fh, "Client Connected\r\n");
echo "Client: ".socket_read($sock, 1024);
socket_write($sock, "OK\n\r");
//Some way to store client sockets?
}
socket_close($sersock);
fclose($fh);
?>
运行.java
Socket socket = new Socket("localhost", 1234);
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(
socket.getOutputStream()));
BufferedReader br = new BufferedReader(new InputStreamReader(
socket.getInputStream()));
bw.write("Server OK?");
bw.flush();
System.out.println("Server:"+br.readLine()); //Output-> Server:OK
System.out.println("Server:"+br.readLine()); //Output-> Server:
bw.close();
br.close();
socket.close();
还有,remote.php (我想访问 resgsock.php 上接受的套接字)
<?php
$sock = //Retrieve socket resource here
fwrite($sock, "REMOTE PAGE\r\n");
echo "Socket write complete";
?>
有没有可能,或者我只是做错了。
这可以通过其他方法来完成吗?
【问题讨论】:
-
您打算在哪个操作系统上运行 PHP?例如,Windows API 具有将套接字从一个进程传递到另一个进程的函数 WSADuplicateSocket。 msdn.microsoft.com/en-us/library/windows/desktop/…
-
@Joni : PHP 正在 Linux 上运行