簡體   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