Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
简单的Java TCP服务器和PHP客户端问题_Java_Php_Client Server - Fatal编程技术网

简单的Java TCP服务器和PHP客户端问题

简单的Java TCP服务器和PHP客户端问题,java,php,client-server,Java,Php,Client Server,我试图在一个Java应用程序(用作TCP服务器)和一个PHP脚本(用作客户端)之间的单个端口上建立一个简单的TCP连接 我将为下面的每一项发布代码,但问题是: 我可以将数据连接并发送到Java服务器。我可以得到数据并打印出来。我的问题出现在尝试将响应发送回php服务器时 当我注释掉php的最后一行“echo socket_read($socket,14,php_NORMAL_read);”时,数据很好地进入Java服务器。当我重新添加该行时,数据甚至不会到达Java服务器 因此,我假设我的问题与

我试图在一个Java应用程序(用作TCP服务器)和一个PHP脚本(用作客户端)之间的单个端口上建立一个简单的TCP连接

我将为下面的每一项发布代码,但问题是: 我可以将数据连接并发送到Java服务器。我可以得到数据并打印出来。我的问题出现在尝试将响应发送回php服务器时

当我注释掉php的最后一行“echo socket_read($socket,14,php_NORMAL_read);”时,数据很好地进入Java服务器。当我重新添加该行时,数据甚至不会到达Java服务器

因此,我假设我的问题与我如何从Java发送数据或试图从服务器获取PHP数据有关

这真让我难堪,任何帮助都将不胜感激

Java服务器:

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);
}

已解决:这是解决方案,我知道了问题所在。当从Java服务器读回数据时,我只读取了一个块,其余的都挂起了。需要在循环中读取数据才能获取所有数据

另外,我发送到Java服务器的数据没有以新行或回车结束

下面重新编写的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);

responseString=command+“MC2它可以工作!”+“\r\n”;我认为您必须添加该行的EOF,套接字知道您完成了数据发送是的,这肯定是问题的一部分。在提交问题20分钟后,我就想明白了。生活也是如此,干得不错。作为一个友好的提醒,你能自己发布一个问题的答案,然后接受这个答案,这样我们就可以结束这个问题了吗?也许你还没有足够的声誉,但请记住,如果需要的话,你可以而且应该回答自己的问题。谢谢,我实际上忘记了这一点。一旦我解决了这个问题,它就从我身边消失了,我开始稍微专注于我正在做的其他事情。希望这可以帮助别人。你好KayoticSully:我尝试运行您的示例,但它在浏览器中显示为连续加载,如果您已经这样做了,请帮助我。