1
我通過套接字傳輸字符串數據,數據完美但緩慢地傳輸。套接字Java/PHP緩慢傳輸數據
我的Java客戶端具有下面的代碼(這是一個bukkit服務器插件):
while(true) {
try {
ServerSocket SRVSOCK = new ServerSocket(25560);
Socket SOCK = SRVSOCK.accept();
InputStreamReader IR = new InputStreamReader(SOCK.getInputStream());
BufferedReader BR = new BufferedReader(IR);
String MESSAGE = BR.readLine();
System.out.println(MESSAGE);
if (MESSAGE != null) {
PrintStream PS = new PrintStream(SOCK.getOutputStream());
String data = "";
data += "{";
data += "\"server\": {";
data += "\"name\": \"" + getConfig().getString("data.name") + "\",";
data += "\"onlineplayers\": \"" + String.valueOf(getServer().getOnlinePlayers().length) + "\",";
data += "\"maxplayers\": \"" + String.valueOf(getServer().getMaxPlayers()) + "\"";
data += "}";
data += "}";
data += "}";
System.out.println(data);
PS.println(data);
}
} catch (Exception e) {
}
}
數據串結束了持有價值{"server": {"name": "Gaming Node 2","onlineplayers": "1","maxplayers": "20"}}}
我的PHP客戶端具有下面的代碼:
<?php
if(!($sock = socket_create(AF_INET, SOCK_STREAM, 0)))
{
$errorcode = socket_last_error();
$errormsg = socket_strerror($errorcode);
die("Couldn't create socket: [$errorcode] $errormsg \n");
}
echo "Socket created \n";
//Connect socket to remote server
if(!socket_connect($sock ,gethostbyname("Ip.address.com"), 25560))
{
$errorcode = socket_last_error();
$errormsg = socket_strerror($errorcode);
die("Could not connect: [$errorcode] $errormsg \n");
}
echo "Connection established \n";
$message = "GET/HTTP/1.1\r\n\r\n";
//Send the message to the server
if(! socket_send ($sock , $message , strlen($message) , 0))
{
$errorcode = socket_last_error();
$errormsg = socket_strerror($errorcode);
die("Could not send data: [$errorcode] $errormsg \n");
}
echo "Message send successfully \n";
//Now receive reply from server
if(socket_recv ($sock , $buf , 2045 , MSG_WAITALL) === FALSE)
{
$errorcode = socket_last_error();
$errormsg = socket_strerror($errorcode);
die("Could not receive data: [$errorcode] $errormsg \n");
}
//print the received message
echo $buf;
socket_close($sock);
?>
數據傳輸成功,但大約需要10秒鐘。如果我將java端的數據字符串縮短一段時間,可能需要大約1.5秒。我不認爲這是網絡連接速度問題,因爲它們都運行在同一臺機器上(我是否需要在php腳本區域編寫本地主機以利用它們位於同一臺機器上的事實)?如何更快地傳輸數據?
是,使用'127.0.0.1' – goat
真正地沒有改變速度在所有 – user3578316
嘗試'PS.flush();'PS.println(數據)之後','(一般與Java網絡:在消息放入線路後始終刷新)。 – vanOekel