java - 带有 PHP 客户端的 Java Socket 服务器
问题描述
这个问题被完全改写了,因为我知道以前真的不清楚。我创建了一个带有线程的 Java Socket 服务器来接受多个连接以处理 php tcp 请求。java 服务器只是为了测试目的,它反转了从 php.ini 提供的字符串。Java 服务器托管在 ubuntu 服务器上,而 php 位于另一台机器上。java服务器显示php客户端已经连接,但是php没有加载,字符串也没有发送。从下面给出的代码中可能是什么错误?
更新问题是从 Java 服务器接收到的字符串。我用调试器检查过,BufferedReader 充满了 '\u0000' 并且服务器停止响应。其余代码和通信工作完美。我怎样才能避免那些空字符或正确解码字符串?
反向服务器
import java.io.*;
import java.net.*;
public class ReverseServer {
public static void main(String[] args) {
int port = 10007;
try (ServerSocket serverSocket = new ServerSocket(port)) {
System.out.println("Server is listening on port " + port);
while (true) {
Socket socket = serverSocket.accept();
System.out.println("New client connected");
new ServerThread(socket).start();
}
} catch (IOException ex) {
System.out.println("Server exception: " + ex.getMessage());
ex.printStackTrace();
}
}
}
服务器线程
import java.io.*;
import java.net.*;
public class ServerThread extends Thread {
private Socket socket;
public ServerThread(Socket socket) {
this.socket = socket;
}
public void run() {
try {
InputStream input = socket.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(input));
OutputStream output = socket.getOutputStream();
PrintWriter writer = new PrintWriter(output, true);
String text;
do {
text = reader.readLine();
String reverseText = new StringBuilder(text).reverse().toString();
writer.println("Server: " + reverseText);
} while (!text.equals("bye"));
socket.close();
} catch (IOException ex) {
System.out.println("Server exception: " + ex.getMessage());
ex.printStackTrace();
}
}
}
PHP客户端
<?php
// websocket connection test
$host = "ip_of_server";
$port = 10007;
$message = "Hello";
echo "Message To server :".$message;
$socket = socket_create(AF_INET, SOCK_STREAM, getprotobyname('TCP'));
$result = socket_connect($socket, $host, $port);
if ($result) {
// send string to server
socket_write($socket, $message, strlen($message)) or die("Could not send data to server\n");
// get server response
$result = socket_read($socket, 1024) or die("Could not read server response\n");
echo "Reply From Server :" . $result;
}
socket_close($socket);
解决方案
我正在尝试读取一行,但是在 php 客户端上给出的字符串上没有回车符号“\r”。一旦我把它放在字符串上,它就会按预期工作。
推荐阅读
- google-apps-script - 使用 Google 表单从用户那里收集收据数据并保存在 Google 表格中
- java - 我的基本货币转换器程序输出错误
- html - 想要修复这个页面背景
- javascript - 列表渲染中的动态样式
- software-design - 迭代和增量软件过程模型之间的区别?
- css - 使用 css 变换和缩放在悬停时定位图像
- python - 从 C++ 解压 python 中的数据
- javascript - 如何修复 HTTP 中的“重定向过多”错误
- react-native - Google OAuth 无法在 react-native-app-auth 中使用
- c# - 如果一个类型与其他类型存在多对多或一对多关系,如何获取?