如何解决带有 PHP 客户端的 Java 套接字服务器
这个问题被完全重写了,因为我知道以前它真的不清楚。 我创建了一个带有线程的 Java Socket 服务器来接受多个连接,以便处理 php tcp 请求。 Java 服务器仅用于测试目的,它反转 php 提供的字符串。 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”。 一旦我把它放在字符串上,它就会按预期工作。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。