好的,所以我正在运行一个包含大量关于不同事物的数据的服务器。 (这是一个Minecraft服务器)
现在,我正在为该服务器创建一个网站,我正在从服务器发送数据的PHP脚本,服务器返回尽可能多的数据。 (它切断了中间的某个地方)
我知道如何让java服务器将字符串块发送到另一个java客户端,但我不熟悉如何在PHP中执行此操作。
这是我的PHP脚本:
<?php
$PORT = 4321;
$HOST = "78.70.152.57";
$name = $_POST['name'];
$sock = socket_create(AF_INET, SOCK_STREAM, 0)
or die("error: could not create socket\n");
$succ = socket_connect($sock, $HOST, $PORT)
or die("UNREACHABLE\n");
$text = "AUCTIONS>MONEY:".$name;
socket_write($sock, $text."\r\n", strlen($text."\r\n") + 1)
or die("error: failed to write to socket\n");
$reply = socket_read($sock, 10000)
or die("error: failed to read from socket\n");
echo $reply;
?>
还提供我的服务器代码,以防万一:
BufferedReader input = new BufferedReader(new InputStreamReader(client.getInputStream()));
String message = input.readLine();
Main.console.sendMessage(message);
String response = "";
if(message.contains(">")) {
String[] messages = message.split(">");
for(String value : messages) {
response += getResponse(value)+">";
}
response = response.substring(0, response.length()-1);
} else {
response = getResponse(message);
}
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(client.getOutputStream()));
if(response != "") {
out.write(response);
} else {
out.write("SERVER-RESPONSE-INVALID");
}
out.flush();
input.close();
out.close();
注意:只有收到消息并回复的部分才会在此处。
注意2:我正在使用AJAX POST代码来获取PHP脚本的回声,如果这很重要的话。
答案 0 :(得分:2)
现在,您读取“最多”10000字节的数据并在此之后将其删除。您想要做的是从套接字读取,直到没有数据为止:
$reply = '';
while(true) {
$chunk = @socket_read($sock, 10000);
if (strlen($chunk) == 0) {
// no more data
break;
}
$reply .= $chunk;
}
echo $reply;