加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

发布时间:2020-12-15 02:32:23 所属栏目:Java 来源:网络整理
导读:我试图在将充当TCP服务器的 Java应用程序和充当客户端的 PHP脚本之间的单个端口上建立简单的TCP连接. 我将在下面发布每个代码,但问题是: 我可以连接并将数据发送到Java服务器就好了.我可以获取该数据并将其打印出来.我的问题出现在尝试将响应发送回php服务
我试图在将充当TCP服务器的 Java应用程序和充当客户端的 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,PHP_NORMAL_READ);
}

解决方法

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

我发送给Java Server的数据也没有以新行或回车结束.

以下重写的PHP客户端现在使整个过程很好地工作

$address = 'minecraft.kayoticgamer.com';
$port = 9005;

$socket = socket_create(AF_INET,getprotobyname('tcp'));
socket_connect($socket,$port);

$message .= chr(10);

$status = socket_sendto($socket,MSG_EOF,$port);
if($status !== FALSE)
{
    $message = '';
    $next = '';
    while ($next = socket_read($socket,4096))
    {
        $message .= $next;
    }

    echo $message;
}
else
{
    echo "Failed";
}

socket_close($socket);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读