簡體   English   中英

通過TCP發送大字符串(Java - PHP)

[英]Sending huge strings over TCP (Java - PHP)

好的,所以我正在運行一個包含很多關於不同事物的數據的服務器。 (這是一個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腳本的回聲,如果這很重要的話。

現在,您讀取“高達”10000字節的數據並在此之后將其刪除。 您想要做的是從套接字讀取,直到沒有數據為止:

$reply = '';
while(true) {
    $chunk = @socket_read($sock, 10000);

    if (strlen($chunk) == 0) {
        // no more data
        break;
    }

    $reply .= $chunk;
}

echo $reply;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM