Codious-JR
Codious-JR

Reputation: 1748

SocketServer Communication between java server and php client

I am trying to establish communication between a SocketServer (Server) in Java and a Socket (Client) in php. The client is able to connect to host, the client is able to send a message and the server reads the message successfully. But the problem arises when the SocketServer writes to the Client, the client does not receive the message from the server.

I have read the other questions on the same scenario (java-php socket communication) but i just can't seem to find what is causing the problem.

If i use a Java Socket as a client the communication works perfectly both ways.

The Server :

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();
        }
    }
}

The Client :

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);

Could someone please guide me to what could be the problem here ?

Upvotes: 2

Views: 2355

Answers (1)

Ozgen
Ozgen

Reputation: 1092

In server side, the code expects a line(terminated with linefeed), in php You send

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

Please check the data you send accordingly making sure that you send the linefeed character.

Upvotes: 1

Related Questions