Я пытался создать связь сокетов между сервером Java и клиентом PHP. Единственное, что я получил, это соединение, но странное сообщение (messy code), полученное от PHP-клиента. Вот код о сервере Java:
public class TestServer extends Thread {
private ServerSocket serverSocket;
public TestServer(int port) throws IOException {
serverSocket = new ServerSocket(port);
}
public void run() {
while (true) {
try {
System.out.println("Waiting for client on port " + serverSocket.getLocalPort()
+ "...");
Socket server = serverSocket.accept();
System.out.println("Just connected to " + server.getRemoteSocketAddress());
InputStreamReader inputStream = new InputStreamReader(server.getInputStream());
BufferedReader input = new BufferedReader(inputStream);
DataOutputStream response = new DataOutputStream(server.getOutputStream());
String command = input.readLine();
System.out.println(command);
server.close();
} catch (SocketTimeoutException s) {
System.out.println("Socket timed out!");
break;
} catch (IOException e) {
e.printStackTrace();
break;
}
}
}
public static void main(String[] args) {
int port = Integer.parseInt(args[0]);
try {
Thread t = new TestServer(port);
t.start();
} catch (IOException e) {
e.printStackTrace();
}
}
}
И код в PHP-клиенте:
<?php
$ip="192.168.1.6"; //Set the TCP IP Address to connect too
$port="9999"; //Set the TCP PORT to connect too
//Connect to Server
$socket = stream_socket_client("tcp://{$ip}:{$port}", $errno, $errstr, 30);
if($socket) {
//Start SSL
stream_set_blocking ($socket, true);
stream_socket_enable_crypto ($socket, true, STREAM_CRYPTO_METHOD_SSLv3_CLIENT);
stream_set_blocking ($socket, false);
$command = array("autospray", "on");
$sock= $socket;
$msg = $command;
function write(&$sock,$msg) {
//$msg = "$msg\n\0";
$length = strlen($msg);
while(true) {
$sent = @socket_write($sock,$msg."\n" ,$length) or die("Could not write output\n");
@socket_shutdown($sock, 2);
@socket_close($sock);
if($sent === false) {
return false;
}
if($sent < $length) {
$msg = substr($msg, $sent);
$length -= $sent;
print("Message truncated: Resending: $msg");
} else {
return true;
}
}
return false;
}
}
?>
В PHP вы шифруете сокет с помощью: stream_socket_enable_crypto(), поэтому сервер JAVA получит зашифрованный поток в inputStream. Вам нужно расшифровать поток, чтобы получить реальное сообщение.