我遇到了TCP服务器(Java)和客户端(PHP)的奇怪问题。 Java服务器挂起在readLine ..
请参阅上面的代码。
Java服务器:
while (true) {
Socket clientSocket = null;
try {
clientSocket = serverSocket.accept();
} catch (IOException e) {
System.err.println("Accept failed.");
System.exit(1);
}
PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream(), "UTF-8"));
String inputLine;
if ((inputLine = in.readLine()) != null) {
System.out.println("Server: " + inputLine);
out.println(handleCommand(inputLine));
} else {
System.out.println("Ooops...");
}
}
PHP客户端:
$fp = fsockopen("127.0.0.1", 6789, $errno, $errstr, 30);
$result = '';
if (!$fp) {
ErrorLog(ALERT, "-", "Unable to connect to java server! $errstr ($errno)");
$result = 'ERROR|Unable to connect to RmServer';
} else {
fwrite($fp, $command.PHP_EOL);
while (!feof($fp)) {
$result .= fgets($fp, 128);
}
fclose($fp);
}
我也试过客户端:
fwrite($ fp,$ command。“\ n”);
fwrite($ fp,$ command。“\ r \ n”);
但结果是一样的。
但是当我使用Java客户端时它运行正常!可能是一些编码相关的问题?我认为当我在控制台中输入命令后输入ENTER时会发生一些魔法。
Java客户端(工作)代码:
if ((userInput = stdIn.readLine()) != null) {
out.println(userInput);
System.out.println("echo: " + in.readLine());
System.out.print("input: ");
} else {
System.out.print("Opppppps..");
}
添加
如果我在PHP客户端发送后由Java客户端发送空字符串,我会看到以下输出:
服务器:test \ ntest \ n