繁体   English   中英

带有 PHP 客户端的 Java 套接字服务器

[英]Java Socket Server with PHP client

这个问题被完全改写了,因为我知道以前真的不清楚。 我创建了一个带有线程的 Java Socket 服务器来接受多个连接,以便处理 php tcp 请求。 Java 服务器仅用于测试目的,它反转 php 提供的字符串。 Java 服务器托管在 ubuntu 服务器上,而 php 位于另一台机器上。 java服务器显示php客户端已连接,但php未加载,字符串未发送。 从下面给出的代码中,可能是什么错误?

更新问题是从 Java 服务器接收到的字符串。 我已经用调试器检查过,BufferedReader 充满了 '\' 并且服务器停止响应。 其余的代码和通信工作完美。 如何避免那些空字符或正确解码字符串?

反向服务器

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”。 一旦我把它放在字符串上,它就会按预期工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM