我正在尝试在将充当TCP服务器的Java应用程序和充当客户端的PHP脚本之间的单个端口上建立简单的TCP连接。
我将在下面发布每个代码,但问题是: 我可以连接并将数据发送到Java服务器就好了。我可以获取该数据并将其打印出来。我的问题出现在尝试将响应发送回php服务器。
当我注释掉php的最后一行“echo socket_read($ socket,14,PHP_NORMAL_READ);”数据到达Java服务器就好了。当我重新添加该行时,数据甚至都没有到达Java服务器。
因此,我假设我的问题与我如何从Java发送数据或尝试从服务器获取PHP数据有关。
这让我很难过,任何帮助都会非常感激!
Java Server:
protected ServerSocket socket;
protected final int port = 9005;
protected Socket connection;
protected String command = new String();
protected String responseString = new String();
socket = new ServerSocket(port);
while(true)
{
// open socket
connection = socket.accept();
// get input reader
InputStreamReader inputStream = new InputStreamReader(connection.getInputStream());
BufferedReader input = new BufferedReader(inputStream);
// get output handler
DataOutputStream response = new DataOutputStream(connection.getOutputStream());
// get input
command = input.readLine();
// process input
Logger.log("Command: " + command);
responseString = command + " MC2 It Works!";
// send response
response.writeBytes(responseString);
response.flush();
response.close();
}
PHP客户端:
$address = 'example.com'; // obviously not the address I am using
$port = 9005;
$message = "Test";
$socket = socket_create(AF_INET, SOCK_STREAM, getprotobyname('tcp'));
socket_connect($socket, $address, $port)
if(socket_send($socket, $message, strlen($message), MSG_EOF) != FALSE)
{
echo socket_read($socket, 14, PHP_NORMAL_READ);
}
答案 0 :(得分:1)
解决:这是我找出问题所在的解决方案。当从Java服务器读取数据时,我只读了一个块,其余的都挂了。需要在循环中读取数据才能获得所有数据。
此外,我发送给Java Server的数据并未以新行或回车结束。
以下重写的PHP客户端现在可以使整个工作正常运行
$address = 'minecraft.kayoticgamer.com';
$port = 9005;
$socket = socket_create(AF_INET, SOCK_STREAM, getprotobyname('tcp'));
socket_connect($socket, $address, $port);
$message .= chr(10);
$status = socket_sendto($socket, $message, strlen($message), MSG_EOF, $address, $port);
if($status !== FALSE)
{
$message = '';
$next = '';
while ($next = socket_read($socket, 4096))
{
$message .= $next;
}
echo $message;
}
else
{
echo "Failed";
}
socket_close($socket);