2

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 ?

1 Answer 1

1

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.

Sign up to request clarification or add additional context in comments.

1 Comment

Thank you Ozgen, that was the problem! The server was looking for the endline!

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.