編集:私は自分の問題を解決し、誰かが同じ問題に遭遇した場合に備えて、これらの変更を反映するように以下のコードを修正しました。このコードは、PHP クライアントと Java サーバー接続で機能します。
フォーラムにはこれらの質問が山ほどあることは承知していますが、8 時間以上にわたって他のほとんどすべてのことを試しましたが、もう限界です。Java Socket から PHP Socket に文字列を送信しようとしています。私はPHPソケットの初心者なので、誰かが私の問題をかなり簡単に診断できることを願っています.PHPコードは次のとおりです。
<html>
<head>
</head>
<body>
<?php
//connection to NetworkService in app to manage incoming request
$addr = 'your server address';
$port = 1740;
$socket = socket_create(AF_INET, SOCK_STREAM, getprotobyname('tcp'));
socket_connect($socket, $addr, $port);
//"\r\n" is very important as it signifies to the server
// that this is the end of the transmission
$request = "message to send \r\n";
//no flags needed circa php 5.2
$sent = socket_sendto($socket, $request, strlen($request), 0 , $addr, $port);
if($sent !== FALSE){
$message = '';
$next = '';
//loop through to continue appending until everything has been read
while($next = socket_read($socket, 4096)){
$message .= $next;
}
echo $message;
} else{
echo "Failed.";
}
socket_close($socket);
?>
</body>
</html>
Java コード:
public class TestServer{
public static void main(String argv[0]) throws Exception{
String in; String out = "Hello PHP\r\n";
ServerSocket inSock = new ServerSocket(1740);
while(true){
System.out.println("Now accepting connections");
Socket outSock = inSock.accept();
BufferedReader bReader = new BufferedReader(
new InputStreamReader(outSock.getInputStream()));
PrintWriter sender = new PrintWriter(outSock.getOutputStream());
in = bReader.readLine();
System.out.println("Received: " + in);
dWriter.print(out);
System.out.println("Sent: " + out);
}
}
}
問題は、最初の送信 (PHP から JAVA への送信) ではなく、ハングする 2 番目の送信 (応答) にあります。Java コードは完全に実行されるので、問題は socket_read() または socket_recv() 関数に関係していることがわかります。私は sleep() を試み、socket_setnoblock() を使用してメソッドを試しました (おそらく間違っています)。私の「OPTION:」コメントからわかるように、ここでもいくつかの異なる方法を試しましたが、役に立ちませんでした。何が欠けている可能性がありますか?よろしくお願いします!