套接字:为什么我从服务器发送来的消息总是被拆分成完全相同的2条消息? - java

此php代码段位于服务器端:

if (($sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) === false) 
    echo "socket_create() failed: reason: " . socket_strerror(socket_last_error()) . "\n";


//bind the socket to the ip address and port
if (socket_bind($sock, $address, $port) === false) 
    echo "socket_bind() failed: reason: " . socket_strerror(socket_last_error($sock)) . "\n";  

//make the socket listen for connections, SOMAXCONN is the max limit of queued sockets waiting to 
//connect
if (socket_listen($sock, SOMAXCONN) === false) 
    echo "socket_listen() failed: reason: " . socket_strerror(socket_last_error($sock)) . "\n";

if (($client= socket_accept($sock)) === false) 
    echo "socket_accept() failed: reason: " . socket_strerror(socket_last_error($sock)) . "\n";

if ( false === ($id = socket_read($client, 10, PHP_NORMAL_READ)) )
    socket_close( $client ); //close the socket connection

$talkback = "PHP: Your id is '$id'.\n";
socket_write($client, $talkback, strlen($talkback));

此Java代码段位于客户端:

while ((inputLine = in.readLine()) != null) 
    Log.i( "MY_TAG", "Message received: " + inputLine);

其中inputLine是一个字符串,而in是我的客户端套接字的输入流。

输出总是:

Message received: Your id is '1

Message received: '.

参考方案

您正在从套接字读取$id,并且在PHP_NORMAL_READ中读取由换行符终止,因此$id == "1\n"。只是trim()它:

$id = trim($id);
//or
$talkback = "PHP: Your id is '" . trim($id) . "'.\n";

Java-搜索字符串数组中的字符串 - java

在Java中,我们是否有任何方法可以发现特定字符串是字符串数组的一部分。我可以避免出现一个循环。例如String [] array = {"AA","BB","CC" }; string x = "BB" 我想要一个if (some condition to tell wheth…

Java Scanner读取文件的奇怪行为 - java

因此,在使用Scanner类从文件读取内容时,我遇到了一个有趣的问题。基本上,我试图从目录中读取解析应用程序生成的多个输出文件,以计算一些准确性指标。基本上,我的代码只是遍历目录中的每个文件,并使用扫描仪将其打开以处理内容。无论出于何种原因,扫描程序都不会读取其中的一些文件(所有UTF-8编码)。即使文件不是空的,scanner.hasNextLine()在…

Java Globbing模式以匹配目录和文件 - java

我正在使用递归函数遍历根目录下的文件。我只想提取*.txt文件,但不想排除目录。现在,我的代码如下所示:val stream = Files.newDirectoryStream(head, "*.txt") 但是这样做将不会匹配任何目录,并且返回的iterator()是False。我使用的是Mac,所以我不想包含的噪音文件是.DS_ST…

直接读取Zip文件中的文件-Java - java

我的情况是我有一个包含一些文件(txt,png,...)的zip文件,我想直接按它们的名称读取它,我已经测试了以下代码,但没有结果(NullPointerExcepion):InputStream in = Main.class.getResourceAsStream("/resouces/zipfile/test.txt"); Buff…

Java RegEx中的单词边界\ b - java

我在使用\b作为Java Regex中的单词定界符时遇到困难。对于text = "/* sql statement */ INSERT INTO someTable"; Pattern.compile("(?i)\binsert\b");找不到匹配项Pattern insPtrn = Pattern.compile(&…