我正在尝试使用套接字在Java和PHP之间发送消息,但我无法让它工作。我首先尝试了Java到Java,工作正常,但现在我想让PHP到Java和其他方式。PHP说消息已经发送,但Java没有得到。谁能帮我解决这个问题?
爪哇服务器:
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
public static void main(String args[]) throws IOException {
final int portNumber = 81;
ServerSocket serverSocket = new ServerSocket(portNumber);
while (true) {
Socket socket = serverSocket.accept();
OutputStream os = socket.getOutputStream();
PrintWriter pw = new PrintWriter(os, true);
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String line;
while ((line = br.readLine()) != null) {
System.out.println("Client response: " + line);
pw.println(line);
}
pw.close();
br.close();
os.close();
socket.close();
}
}
}
爪哇客户端:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
public class Client extends Thread {
Socket socket;
BufferedReader br;
PrintWriter out;
String disconnectReason;
boolean disconnected = false;
public boolean running;
public static void main(String[] args) {
Client client = new Client();
client.sendMessage("Hello!");
}
public Client() {
new Thread(this).start();
running = true;
}
@Override
public void run() {
try {
socket = new Socket("localhost", 81);
br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
out = new PrintWriter(socket.getOutputStream(), true);
while (running) {
String line;
if((line = br.readLine()) != null) {
System.out.println("Server response: " + line);
}
}
System.out.println("Disconnected. Reason: " + disconnectReason);
disconnected = true;
running = false;
br.close();
out.close();
socket.close();
System.out.println("Shutted down!");
System.exit(0);
} catch (IOException e) {
if(e.getMessage().equals("Connection reset")) {
disconnectReason = "Connection lost with server";
disconnected = true;
System.out.println("Disconnected from server. Reason: Connection reset");
} else {
e.printStackTrace();
}
}
}
public void sendMessage(String message) {
if(running) {
if (!disconnected) {
if (out != null && socket != null) {
out.println(message);
out.flush();
}
}
}
}
}
我尝试过的PHP代码:
<?php
$host = "localhost";
$port = 81;
$data = 'test';
if ( ($socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) === FALSE )
echo "socket_create() failed: reason: " . socket_strerror(socket_last_error());
else
{
echo "Attempting to connect to '$host' on port '$port'...<br>";
if ( ($result = socket_connect($socket, $host, $port)) === FALSE )
echo "socket_connect() failed. Reason: ($result) " . socket_strerror(socket_last_error($socket));
else {
echo "Sending data...<br>";
socket_write($socket, $data, strlen($data));
echo "OK<br>";
echo "Reading response:<br>";
while ($out = socket_read($socket, 2048)) {
echo $out;
}
}
socket_close($socket);
}
?>
编辑:似乎注释socket_read解决了在 Java 中接收消息的问题,但问题仍然存在,如何从 Java 发送到 PHP
好的,发现了问题,您必须显示php
行的末尾在哪里,以便套接字可以发送它,它将像魅力一样工作:)
socket_write ($my_socket, $data."rn", strlen ($data."rn"));