首页 > 解决方案 > 带有 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);

标签: javaphpserversocket

解决方案


我正在尝试读取一行,但是在 php 客户端上给出的字符串上没有回车符号“\r”。一旦我把它放在字符串上,它就会按预期工作。


推荐阅读