簡體   English   中英

Java服務器與php客戶端之間的SocketServer通信

[英]SocketServer Communication between java server and php client

我正在嘗試在Java中的SocketServer(服務器)和php中的套接字(客戶端)之間建立通信。 客戶端能夠連接到主機,客戶端能夠發送消息,服務器成功讀取消息。 但是,當SocketServer寫入客戶端時,客戶端不會收到來自服務器的消息,就會出現問題

我已經閱讀了同一場景下的其他問題(java-php套接字通信),但是我似乎無法找到導致問題的原因。

如果我使用Java Socket作為客戶端,則兩種通信方式都可以正常工作。

服務器 :

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {

    protected ServerSocket socket;
    protected final int port = 9005;
    protected Socket connection;
    protected String command = new String();
    protected String responseString = new String();

    public void init(){

        System.out.println( "Launching Server: " );
        try{
            socket = new ServerSocket(port);


            while(true)
            {
                // open socket
                connection = socket.accept();
                System.out.println( "Client Connected " );

                // get input reader
                InputStreamReader inputStream = new InputStreamReader(connection.getInputStream());
                BufferedReader input = new BufferedReader(inputStream);

                // get input
                command = input.readLine();

                // process input
                System.out.println("Command: " + command);
                responseString = command + " MC2 It Works!";

                // get output handler
                PrintStream response = new PrintStream(connection.getOutputStream());

                // send response
                response.println(responseString);
            }
        }
        catch (IOException e){
            e.printStackTrace();
        }
    }
}

客戶端 :

class Client {

    private $address;
    private $port;

    public function __construct($address, $port){
        $this->address = $address;
        $this->port = $port;
        $this->init();
    }

    private function init(){

        //create socket
        if(! $socket = socket_create(AF_INET, SOCK_STREAM, getprotobyname('tcp'))){
            $this->showError("socket create");
        };

        //establish connection
        socket_connect($socket, $this->address, $this->port);

        //write to server
        $message = "I am a client";
        socket_write($socket, $message, strlen($message)); //Send data

        echo "Listening to Server\n";

        //read from server
        if(!$reponse = socket_read($socket, 2048, PHP_NORMAL_READ)){
            $this->showError("socket read");
        }

        //print response
        echo "Response from server------------------\n";
        echo $reponse;

        socket_close($socket);

    }

    private function showError($message){
        echo ("Error: ".$message);
        exit(666);

    }

}

$address="localhost";$port=9005;
echo "Testing Client Server\n";
$client = new Client($address, $port);

有人可以指導我這里有什么問題嗎?

在服務器端,代碼期望一行(以換行結尾),在php中,您發送

socket_write($socket, $message, strlen($message)); 

請檢查發送的數據,確保發送換行符。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM