открытый сокет между приложением Java и переполнением стека

Я использую сокет для отправки данных со страницы 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();
}

0

Решение

Когда сокет открыт, буферизованное чтение занято и не может быть использовано!
Эта проблема называется блокировкой ..

Вы можете решить эту проблему, используя многопоточность в вашем приложении.

Джава Код:

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



}

}
0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector