Java 带 PHP 客户端的套接字服务器
Java Socket Server with PHP client
这个问题完全重写了,因为我了解到以前确实不清楚。
为了处理 php tcp 请求,我创建了一个带有线程的 Java 套接字服务器来接受多个连接。
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 客户端给出的字符串上没有回车 return 符号“\r”。
一旦我将它放在字符串上,它就会按预期工作。
这个问题完全重写了,因为我了解到以前确实不清楚。 为了处理 php tcp 请求,我创建了一个带有线程的 Java 套接字服务器来接受多个连接。 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 客户端给出的字符串上没有回车 return 符号“\r”。 一旦我将它放在字符串上,它就会按预期工作。