komunikacja send() C++/JAVA readUTF()

Odpowiedz Nowy wątek
2011-08-27 00:41
0

witam,

z serwera napisanego w c++ forwarduje dane (otrzymane uprzednio z clienta pisanego w javie) przy pomocy funkcji send() w postaci:

char bufor[1024];
    memset(bufor, 0, 1024);
 
    while (1) {
        if (recv(gn, bufor, 2, 0) > 0) { //ucinam 2 bajty znaki, które JAVOWA funkcja writeUTF() dodaje na poczatku 
            memset(bufor, 0, 1024); //ponownie zeruje tablice bufor
            recv(gn, bufor, 1024, 0); //teraz odczytuje juz reszte transmisji
            string wiadomosc = inet_ntoa(adr.sin_addr);
            wiadomosc +=": ";
            wiadomosc +=bufor;
            int ileWyslano = send(gn, wiadomosc.c_str(), wiadomosc.length()+1, 0);
            cout << wiadomosc << " [czyli wysłano:"<<ileWyslano << "bajtów]" << endl;
        }
    }

natomiast dostarczam je na server pisany w javie (to zapętlona funckja run() wątku, który powinien zczytywać przesyłane dane):

   private Socket socket;
   private InetAddress address;
   private Integer port;
   private LinkedList<String> message;
   private DataOutputStream dos;
   private DataInputStream dis;

   public TCP2(InetAddress address, Integer port) throws IOException {
       socket = new Socket(address, port);
       dos = new DataOutputStream(socket.getOutputStream());

       message = new LinkedList<String>();

   }

@Override
   public void run() {

       while (true) {
                           try {
                               dis = new DataInputStream( new BufferedInputStream(socket.getInputStream()));
                               if (dis.available() > 0) {
                                   message.add(dis.readUTF());
                                   dis.close();
                               }
                           } catch (IOException ex) {
                               Logger.getLogger(TCP2.class.getName()).log(Level.SEVERE, null, ex);
                           }

       }

   }

debuggowałem kod i dane rzeczywiście są przesyłane z serwera (bo pojawiają się odpowiednie wartości dziesietne odpowiadające przesyłanym znakom w obiekcie dis), jednakże nic nie dodaje się do listy message
czemu? gdzie tkwi błąd? jak to naprawić?

//dodam, że nie ma błędów kompilacji i zmiana

dis = new DataInputStream( new BufferedInputStream(socket.getInputStream()));

na

dis = new DataInputStream( socket.getInputStream());

nic nie zmienia...

edytowany 1x, ostatnio: majkeluam, 2011-08-27 01:40

Pozostało 580 znaków

2011-08-27 02:38
02Eh
0

Twoja petla jest troche nie teges. Kiedy wg Ciebie sie zakonczy?

Pozostało 580 znaków

2011-08-27 02:41
0

zakonczy sie, gdy wątek zatrzymam. nie przejmuj się tym.

problem tkwi w przesyłaniu Stringa...

Pozostało 580 znaków

2011-08-27 15:03
0

poradziłem sobie zamieniając readUTF() na read() i zamieniając potem otrzymane bajty na char, a te z kolei na Stringa.
eot

Pozostało 580 znaków

2011-08-27 15:08
02Eh
1

W dokumentacji metod Data.UTF() jest wyjasnione jak dzialaja obie metody i czym jest ten "narzut", ktory obcinasz podczas forwardowania.
HTH.

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0