Socket + Applet - nic nie działa

0

Witam,

W sieci jest sporo przykładów użycia javy i socketów jednak i tak sa problemy.

Mam serwer napisany w C++ nasłuchuje na porcie 5000. Mam klienta napisanego w javie jako applet i podczas próby połączenia nie łączy się. Program uruchomiony nie jako applet łączy sie z serwerem i wysyła dane. Czy applet ma mieć jakąś inną konfiguracje, ustawienia czy jak to jest. Potrzebuję aby applet łączył się z serwerem.

Pozdrawiam.

0

Bodajże aplet może łączyć się tylko z serwerem, którego pochodzi (SecurityManager czy jakoś tak się tym zajmuje)

0

Podpisz aplet, poszukaj na forum jak się to robi.

0

A jak się applet podpisuje - wpisałam w google java applet podpisanie i nic konkretnego nie widać - da mi ktos przykładowego linka.

Zmiana do java.policy - dopisanie

grant
{
  // Pelne uprawnienia dla wszystkich ladowanych zdalnie klas
  permission java.security.AllPermission; 
};

i pomogło.

Jako że nie znam javy chciałabym aby ktoś mógł opisać jak takie coś mam wykonać.
Chodzi o napisanie z grubsza co powinno być w wątku a co nie. Może coś trzeba synchronizować?

A więc coś w stylu web-gadu
Otwieram stronę www i uruchamia mi się applet.
Mogę wpisać swój nick i hasło - klikam zaloguj.
Wow zalogowałam się i otrzymałam listę moich znajomych.

Patrzę kto jest dostępny to jemu wysyłam wiadomość 'hej co słychac'.

Za realizacje listy użytkowników i kto jest dostępny odpowiada serwer. Przyjmijmy założenie że serwer działa i jest ok.

Za odpowiedź przyjmuje wpis:

Funkcja conect to jeden wątek.
Funkcje wysyłanie i odbieranie danych są w dwóch wątkach.
Odbieranie danych trzeba synchronizować

Oczywiście co tu napisałam to mi się tak wydaje - ale chcę uzyskać odpowiedź od kogoś kto zna javę. Bo ja dziś ją się uczę drugi dzień.
Pozdrawiam.

0

http://4programmers.net/Forum/449613?h=jarsigner#id449613
Usuń natychmiast ten wpis

grant
{
  // Pelne uprawnienia dla wszystkich ladowanych zdalnie klas
  permission java.security.AllPermission;
};

upoważniłaś wszystkie aplety na świecie do czytania i pisania na Twoim dysku.</quote>

0

Dziękuje za ostrzeżenie - chwila nie uwagi i mogło by byc nieciekawie.

Zmodyfikowałam plik java.policy

ten fragment

permission java.net.SocketPermission "localhost:1024-", "listen";

na ten

permission java.net.SocketPermission "localhost:1024-", "listen,connect";

To chyba bezpiecznie - czy to znaczy że po uruchomieniu appletu może on wykonać połączenie z serwerem który jest na lokalnym dysku.

A co tu zrobić jak serwer jest na innym komputerze uruchomiony?
Bo przecież jak użytkownik wejdzie na stronę to od razu otrzyma błąd -
on ma tylko takie pozwolenie java.net.SocketPermission "localhost:1024-", "listen";

0

Podpisz wreszcie ten aplet, przecież u innych użytkowników nie zmienisz zawartości pliku java.policy.

0

Nie jestem pewna ale czy z tym podpisaniem to ma być cos w tym stylu:

http://www.certum.pl/upload_module/wysiwyg/certum/pdf/instrukcje/java_code_signing/JAVA_CODE_SIGNING_v1_2.pdf

0

Przecież dwa posty wcześniej wkleiłem link opisujący jak możesz sama podpisać aplet.
http://4programmers.net/Forum/[...]49613&h=jarsigner#id449613

0

Niestety ale po podpisaniu appletu mam inny błąd.

Java Plug-in 1.6.0_14
Using JRE version 1.6.0_14-b08 Java HotSpot(TM) Client VM
User home directory = C:\Users\JA
----------------------------------------------------
c:   clear console window
f:   finalize objects on finalization queue
g:   garbage collect
h:   display this help message
l:   dump classloader list
m:   print memory usage
o:   trigger logging
q:   hide console
r:   reload policy configuration
s:   dump system and deployment properties
t:   dump thread list
v:   dump thread stack
x:   clear classloader cache
0-5: set trace level to <n>
----------------------------------------------------


java.security.AccessControlException: access denied (java.io.FilePermission C:\Users\JA\workspace\Klient\bin read)
	at java.security.AccessControlContext.checkPermission(Unknown Source)
	at java.security.AccessController.checkPermission(Unknown Source)
	at java.lang.SecurityManager.checkPermission(Unknown Source)
	at java.lang.SecurityManager.checkRead(Unknown Source)
	at java.io.File.isDirectory(Unknown Source)
	at sun.plugin2.applet.Plugin2ClassLoader.getPermissions(Unknown Source)
	at java.security.SecureClassLoader.getProtectionDomain(Unknown Source)
	at java.security.SecureClassLoader.defineClass(Unknown Source)
	at sun.plugin2.applet.Applet2ClassLoader.findClass(Unknown Source)
	at java.lang.ClassLoader.loadClass(Unknown Source)
	at java.lang.ClassLoader.loadClass(Unknown Source)
	at java.lang.ClassLoader.loadClassInternal(Unknown Source)
	at AppletClient.init(AppletClient.java:33)
	at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
	at java.lang.Thread.run(Unknown Source)
Exception: java.security.AccessControlException: access denied (java.io.FilePermission C:\Users\JA\workspace\Klient\bin read)

a kod html wygląda tak

<html>
<head>
    <title> Applet Witaj </title>
</head>
<body>
    <h1>Applet socket Witaj:</h1>
    
    <APPLET CODE="AppletClient.class" 
        ARCHIVE="AppletClientJar.jar"
        width=300
        height=120>
     </APPLET>   

</body>
</html>
0

Przy otwieraniu strony z podpisanym powinno pojawić się pytanie o zgodę na uruchomienie.
user image lub user image (zależnie od przegłądarki).
Pojawiło się?
Po skompilowaniu apletu, utworzeniu i podpisaniu pliku jar, trzeba na nowo uruchomić przeglądarkę, inaczej korzysta ona z poprzedniej wersji apletu.
Program appletviewer nie respektuje podpisu.

0

Ok teraz działa - źle podpisywałam plik JAR.

Dzięki za pomoc
Pozdrawiam

0

Jeszcze jedna uwaga, Twój aplet czyta coś z pliku lokalnego

C:\Users\JA\workspace\Klient\bin
To nie jest dobry pomysł. Inni użytkownicy apletu nie mają tego pliku.

0

Tu było tylko czytanie z pliku JAR - a tam była dodana tylko jedna klasa a tak naprawde w pliku JAR mam dwie klasy.

Jednakże ciesze się że kwestie związane z bezpieczeństwem i zdalnym uruchomieniem appletu mam już za sobą - teraz mogę zająć się właściwym tworzeniem/ budowaniem projektu.

Pozdrawiam.

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