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...