Я использую сокет для отправки данных со страницы PHP в настольное приложение Java, чтобы обработать его и вернуть обработанные данные.
Проблема в том, что я не могу использовать данные, полученные со страницы Php в POINT X (см. Java-код) .. Я имел в виду между чтением и записью!
даже если я хочу просто напечатать это:
String line = "";
while ((line = br.readLine()) != null){
System.out.println(line);
}
Это код ..
В ЯВА:
boolean stayRunning=true;
while(stayRunning){
try{
Socket s = new Socket("localhost",1235);
BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
POINT X
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
bw.write("Hello Java\n");
bw.flush();
String line = "";
while ((line = br.readLine()) != null){
System.out.println(line);
}
bw.close();
br.close();
s.close();
}
catch(Exception e)
{
//System.out.println("Java Error: " + e.getMessage());
}
}
В Php:
try {
$host = "localhost";
$port = 1235;
$socket = socket_create(AF_INET, SOCK_STREAM, 0) or die("Could not create socket\n");
$result = socket_bind($socket, $host, $port) or die("Could not bind to socket\n");
$result = socket_listen($socket, SOMAXCONN) or die("Could not set up socket listener\n");
$spawn = socket_accept($socket) or die("Could not accept incoming connection\n");
$input = socket_read($spawn, 10000, PHP_NORMAL_READ) or die("Could not read input\n");
echo $input;
$output = $_POST["txtbox"]."+|+".$_POST["se"];
socket_write($spawn,$output."\n", strlen($output) + 1) or die("Could not write output\n");
socket_close($spawn);
socket_close($socket);
}
catch(Exception $e) {
echo 'Message: ' .$e->getMessage();
}
Когда сокет открыт, буферизованное чтение занято и не может быть использовано!
Эта проблема называется блокировкой ..
Вы можете решить эту проблему, используя многопоточность в вашем приложении.
Джава Код:
public class PhpJavaConnection extends Thread {
static BufferedReader br = null;
static BufferedWriter bw = null;
static Socket s = null;
public void run(){
String line = "";
try {
while ((line = br.readLine()) != null){
System.out.println(line);
}
} catch (IOException ex) {
//Logger.getLogger(PhpJavaConnection.class.getName()).log(Level.SEVERE, null, ex);
}
}
public static void main(String[] args) {
boolean stayRunning=true;
System.out.println("Reading..");
while(stayRunning){
try{
s = new Socket("localhost",1235);
br = new BufferedReader(new InputStreamReader(s.getInputStream()));
PhpJavaConnection my = new PhpJavaConnection();
my.start();
bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
bw.write("Hello Java \n");
bw.flush();
}
catch(Exception e)
{
//System.out.println("Java Error: " + e.getMessage());
}
}
try {
bw.close();
br.close();
s.close();
} catch (IOException ex) {
Logger.getLogger(PhpJavaConnection.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
}
}
}
Других решений пока нет …