| Author |
Message
|
enemyhilator Poziom 14

Joined: 29 Jul 2007 Posts: 156 Location: D.M.
|
#1
04 Jun 2009 08:34 Java połączenia SSL nie przesyła pakietów. |
|
|
|
Witam mam problem z przesyłaniem pakietów po połączeniu SSL. Połączenie zestawia się prawidłowo, negocjacja szyfrów itp. działa, ale żadne pakiety nie przechodzą na drugą stronę. Klient wysyła komunikat, a ten komunikat nie zostaje odebrany przez serwer - tak jak by go nie było. Załączam kod serwera.
| Code: |
public class cSerwerSocket {
private int port = 4444;
private SSLServerSocket sSocket = null;
public cSerwerSocket() throws Exception {
try {
SSLServerSocketFactory factory = (SSLServerSocketFactory) SSLServerSocketFactory
.getDefault();
sSocket = (SSLServerSocket) factory.createServerSocket(port);
String[] sup = sSocket.getSupportedCipherSuites();
sSocket.setEnabledCipherSuites(sup);
while (true) {
SSLSocket cSock = (SSLSocket) sSocket.accept();
klientThread k = new klientThread(cSock);
k.start();
}
} catch (IOException e) {
System.err.println(e);
}
}
}
class klientThread extends Thread {
private SSLSocket socket = null;
private PrintWriter out;
private InputStream in;
public klientThread(SSLSocket socket_) {
super();
socket = socket_;
try {
socket.startHandshake();
out = new PrintWriter(socket.getOutputStream());
in = socket.getInputStream();
} catch (Exception ex) {
System.err.println(ex);
}
}
@Override
public void run() {
boolean repeat = true;
try {
while (repeat) {
Thread.sleep(25);
if (in.available() != 0) {
byte[] bufor = new byte[in.available()];
in.read(bufor);
if (bufor[0] == '!') {
repeat = false;
}
System.out.println(new String(bufor));
out.print(new String(bufor));
out.flush();
}
}
socket.close();
} catch (Exception ex) {
System.err.println(ex);
}
}
}
|
ciekawostka jest taka że jak zrobię to bez wykorzystania wielowątkowości to wszystko działa prawidłowo.
Może zechce ktoś spojrzeć i oświecić mnie co jest nie tak.
|
|
| Back to top |
|
 |
Google

|
#
04 Jun 2009 08:34 |
|
|
|
|
|
| Back to top |
|
 |
pallid Poziom 13

Joined: 29 Oct 2004 Posts: 148
|
#2
08 Jun 2009 21:03 Re: Java połączenia SSL nie przesyła pakietów. |
|
|
|
Nie pokazales klienta, ale zaryzykuje stwierdzenie zebys sprobowal "splukiwac" po Sobie, za kazdym razem, gdy zostawisz cos w (hmm) buforze wyjsciowym klienta, IYKWIMAITYD. Dodatkowo, zamiast operowac na czystym InputStream, wygodniej byloby opakowac go w BufferedReader, albo nawet java.util.Scanner. Pozdr.
|
|
| Back to top |
|
 |
Google

|
#
08 Jun 2009 21:03 |
|
|
|
|
|
| Back to top |
|
 |
piotrkopec Poziom 14

Joined: 19 Jun 2006 Posts: 189 Location: blizne
|
#3
09 Jun 2009 08:59 Re: Java połączenia SSL nie przesyła pakietów. |
|
|
|
Z dokumentacji klasy InputStream
| Quote: |
| The available method for class InputStream always returns 0. |
:)
Aby debugować ssl
| Code: |
| -Djava.protocol.handler.pkgs=com.sun.net.ssl.internal.www.protocol -Djavax.net.debug=ssl |
Miłego dnia
|
|
| Back to top |
|
 |
enemyhilator Poziom 14

Joined: 29 Jul 2007 Posts: 156 Location: D.M.
|
#4
09 Jun 2009 09:20 Re: Java połączenia SSL nie przesyła pakietów. |
|
|
|
Z tym debugowaniem SSL to znam sprawdzałem, ze spłukiwaniem (flush) to przy każdej operacji na strumieniu robię. Z Reder i scaner popróbuje i zobaczę co z tego wyniknie.
|
|
| Back to top |
|
 |
Google

|
#
09 Jun 2009 09:20 |
|
|
|
|
|
| Back to top |
|
 |
piotrkopec Poziom 14

Joined: 19 Jun 2006 Posts: 189 Location: blizne
|
#5
09 Jun 2009 09:33 Re: Java połączenia SSL nie przesyła pakietów. |
|
|
|
Może dokładniej czytaj posty
| Code: |
@Override
public void run() {
boolean repeat = true;
try {
while (repeat) {
Thread.sleep(25);
if (in.available() != 0) { // to ZAWSZE zwraca 0!!!
byte[] bufor = new byte[in.available()];
in.read(bufor);
if (bufor[0] == '!') {
repeat = false;
}
|
poza tym w dokumentacji jest napisane aby nie korzystać z available() klas dziedziczących przy alokacji buforu.
Wywal to in.available() i Thread.sleep(25) i po prostu utwórz wcześniej bufor i czytaj do niego w kółko.
|
|
| Back to top |
|
 |
enemyhilator Poziom 14

Joined: 29 Jul 2007 Posts: 156 Location: D.M.
|
#6
09 Jun 2009 16:11 Re: Java połączenia SSL nie przesyła pakietów. |
|
|
|
Dzięki wszystkim za pomoc. Zadziałało wystarczyło dodać BufferedReader i wysyłać dane z '\n' na końcu. Usunąłem też in.available() i Thread.sleep(25). Jeszcze raz dziękuje za pomoc.
|
|
| Back to top |
|
 |