У меня большая проблема с моим java-клиентом.Отправить массив байтов через сокет между perl и Java
Сервер: perl, с IO :: Socket;
$ п гнездо
sub listen{
while(1){
my $n = $_[0]->accept();
my $thread;
my $thread2;
$thread = threads->create('talk', $n);
$thread2 = threads->create('recu', $n);
}
Когда клиент посылает сообщение на сервер
sub talk{
my $n = $_[0];
while(<$n>){
print $n $_;
}
В «говорить» сервер отправить сообщение клиента обратно клиенту
Клиент: Java, в потоке Я посылаю массив байтов ->
...
public static void handleMsg(byte [] b){
try {
os.write(b);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
->
<pre><code>
byte[] buff = new byte[]{10,4};
ThreadListen.handleMsg(buff);
</code></pre>
I receive in the run() method only the first byte in the array (10)
<pre><code>
public void run(){
DataInputStream in = null;
try{
in = new DataInputStream(s.getInputStream());
} catch (IOException e) {
System.out.println("in or out failed");
System.exit(-1);
}
while(true){
try{
byte[] buff = new byte[6];
int b = in.read(buff, 0, buff.length);
}catch (IOException e) {
System.out.println("Read failed");
System.exit(-1);
}
}
}
Если я пытаюсь отправить
byte[] buff = new byte[]{50,4};
ThreadListen.handleMsg(buff);
Я не беру ничего !!!
ли я что-то пропустил, я полагаю, что если я посылаю
byte[] buff = new byte[]{50,4};
я должен получить 50,4 :)
Спасибо,
Поймите - почему, когда я отправляю 10,4, я получил 10, но когда я отправляю 50,4, я ничего не получил ... – JohnJohnGa
<$n> выбирает строку за строкой: он ничего не вернет, пока не встретит конечный результат, (10) или сокет закрывается другой стороной. Вам нужно использовать 'read', как упоминалось Hasturkun. – araqnid
Вы имеете в виду что-то вроде этого?: Sub talkRead { my $ n = $ _ [0]; мои данные; \t while (1 == 1) { \t \t $ n-> read ($ data, 1024); \t \t print $ n $ data; \t} } – JohnJohnGa