2013-12-13 77 views
0

好吧,所以我正在運行一個服務器,其中包含大量關於不同事情的數據。 (這是一個我的世界服務器)通過TCP發送巨大的字符串(Java - PHP)

現在,我正在爲該服務器創建一個網站,並且我有一個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腳本的回聲,如果這很重要的話。

回答

2

現在,您讀取「upto」10000字節的數據並在此之後將其關閉。你想要做的是從插座讀取,直到沒有數據:

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

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

    $reply .= $chunk; 
} 

echo $reply;