FAQ | Points | Add... | Recent posts | Search | Register | Log in


Java połączenia SSL nie przesyła pakietów.


Post new topic  Reply to topic      Main Page -> Forum Index -> Programming Generally -> Java połączenia SSL nie przesyła pakietów.
Author
Message
enemyhilator
Poziom 14
Poziom 14


Joined: 29 Jul 2007
Posts: 156
Location: D.M.

Post#1 Post from the author of the topic 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

Google Adsense


Post# Post from the author of the topic 04 Jun 2009 08:34   





Back to top
   
pallid
Poziom 13
Poziom 13


Joined: 29 Oct 2004
Posts: 148

Post#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

Google Adsense


Post# 08 Jun 2009 21:03   





Back to top
   
piotrkopec
Poziom 14
Poziom 14


Joined: 19 Jun 2006
Posts: 189
Location: blizne

Post#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
Poziom 14


Joined: 29 Jul 2007
Posts: 156
Location: D.M.

Post#4 Post from the author of the topic 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

Google Adsense


Post# Post from the author of the topic 09 Jun 2009 09:20   





Back to top
   
piotrkopec
Poziom 14
Poziom 14


Joined: 19 Jun 2006
Posts: 189
Location: blizne

Post#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
Poziom 14


Joined: 29 Jul 2007
Posts: 156
Location: D.M.

Post#6 Post from the author of the topic 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
   
Post new topic  Reply to topic      Main Page -> Forum Index -> Programming Generally -> Java połączenia SSL nie przesyła pakietów.
Page 1 of 1
Similar topics
[ATmega16][C] Moduł GPS nie przesyła ramek NMEA (7)
JAVA (JDBC) java.lang.NullPointerException HELP!!! (3)
JAVA java.lang.NoClassDefFoundError POMOCY! (18)
JAVA- kalkulator / pierwszy program w java (2)
[java] Java Speech Recognition GUI (2)
Mikrokontroler z SSL (3)

Page generation time: 0.124 seconds


FAQ || Administrator || Moderators || Widgets and banners || Contact
elektroda.pl topic RSS feed