Aplet na www

0

problem jest nastepujacy, stworzylem aplet, wyeksportowalem klasy do pliku jar, stworzylem plik html

<html> <body> <applet width="640" height="480" code="Galeria.class" archive="Aplet.jar"> </body> </applet> </html>

wszystko umieszczone w jednym folderze, aplet dziala bez problemu w przegladarce uruchamiany z dysku. wrzucilem takze aplet tu:
http://freakman.fm.interia.pl/szachy/index.html

wraz ze wszystkimi potrzebnymi plikami (chociaz chyba tylko Aplet.jar i Galeria.class potrzebny?) i niestety juz z serwera nie moge uruchomic. W operze wyswietla sie napis Aplet loaded ale niestety nic dalej.

0

Zwróć uwagę na wielkość znaków. Serwery często są stawiane na Linux'ie, a ten system w przeciwieństwie do Win$itu zwraca uwagę na wielkość liter, jeśli używasz plików dodatkowych to w kodzie apletu mogłeś dać nazwy różne z rzeczywistymi, albo w kodzie strony. Zadbaj o to... ciekawe, czy to właśnie w tym problem.

0

java.lang.ClassFormatError: Incompatible magic value 171712836 in class file Wyliczenia
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at sun.applet.AppletClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.applet.AppletClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)
at Galeria.init(Galeria.java:82)
at sun.applet.AppletPanel.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)

Rozwiązanie:
http://forum.java.sun.com/thr[...]=646555&messageID=3807705

po ludzku wszytkie pliki .class na serwer marsz :)

0

dziekuje Panowie, dzieki forum jakos ciagne ten projekt. Siadlem do osblugi sieci, chce aby aplet (inteligentne - one wszystko licza) wysylaly do serwera po swoim ruchu tablice dwuwymiarowa ktora serwer przesle do apletu drugiego. Wiem, ze musze to zrobic na watkach, lecz juz czy to ma byc jeden socket czy 2, jak przeslac tablice (wszedzie przyklady odnosnie tekstu, czy mam to zrobic po kolei wartosciami tak jak sie wypelnia normalna tablice?) i jak w ogóle implementowac te watki to juz nie bardzo :/

0

O wątkach pisałem. Poszukaj w dziale poświęconym Javie.
Wysłanie tablicy. W sumie proste trzeba tylko pamiętać by obiekt który wysyłasz implementował interfejs Seralizable.
Prosty klient - serwer jest w dziale o Javie.

0

artykul przeczytalem. wyjasnil mi pare spraw.

s.accept();
s.accept();
new Watek1(s);
new Watek2(s);

jednak...chce aby po polaczeniu 2 apletow nadal im jakies id, pozwalal raz dzialac jednemu i dopiero gdy graczy wykona ruch przeslal tablice i pozwolil wykonac ruch drugiemu graczowi....nie mam pojecia jak to zaimplementowac:/ co umiescic w klasach Watek1 Watek2

0

Hm... razem z opisem ruchu do apletu wysyłasz zmienną boolean np. canMove i jeżeli jest true to gracz może się ruszyć jeżeli nie to nie :)

Na serwerze rejestrujesz sesję do której podpięte są dwa połączenia. zadaniem serwera jest dogadanie tych dwóch połączeń :)

0

tak tylko czy to musi byc zrobione na watkach czy nie- u mnie 2 aplety nie maja dawac mozliwosci ruszania pionkami jednoczesnie. a poza tym czy osobne sockety dla apletow czy jeden socket :/

0

Jestem już w domu więc się rozpiszę :)

Twoja aplikacja składa się w sumie z dwóch programów.

Pierwszy to serwer do którego zadań należą:

  • Zapewnienie komunikacji pomiędzy aplikacjami klienckimi
  • Dostarczenie części konfiguracji do aplikacji klienckich.

Drugim programem jest klient. Jego zadaniem jest:

  • Dostarczenie interfejsu użytkownika
  • Obsługa logiki "biznesowej" aplikacji, czyli gry w szachy
  • Obsługa komunikacji z serwerem.

Jeżeli chcesz, aby wszystko działało dobrze to zacznij od przygotowania protokołu komunikacyjnego najwyższej warstwy. Będzie on zapewniał wspólny język na poziomie "biznesowym" aplikacji. Mówiąc prościej opracuj to w jakim formacie będziesz przesyłał dane o np. ruchu. Moja propozycja:

import java.io.Serializable;
public class Komunikat implements Serializable{
    private static final long serialVersionUID = -3979320124811867075L;
    public final String[] RUCH;
        public final long id;
    public Komunikat(String[] ruch, long id) throws Exception{
        if (ruch.length != 2) 
            throw new Exception("Zły argument!!!");
        this.RUCH = ruch;
                this.id = id;
    }
}

Jak widać klasa Komunikat zawiera jedno pole RUCH, które definiuje początkową i końcową pozycję oraz identyfikator klienta. Posłuży nam do przekazywania najprostszych informacji. To będzie jedyna rzecz którą robi. Reszta to ozdobniki pozwalające na identyfikację.

Teraz popatrzmy jak to ma działać:
Wysyłanie komunikatu:
Użytkownik wykonuje ruch -> aplet sprawdza jego poprawność ->
jeżeli ruch jest nieprawidłowy to pokazuje się odpowiedni komunikat -> koniec;
jeżeli ruch jest prawidłowy -> stworzony zostanie obiekt Komunikat w którym zapisane są informacje o tym ruchu -> Obiekt zostaje przekazany do modułu wysyłającego go na serwer -> Komunikat zostaje wysłany -> czekamy na komunikat zwrotny ->
jeżeli doszedł zmieniamy flagę canMove na false, gracz czeka na ruch przeciwnika -> koniec;
jeżeli flaga zwrotna nie doszła -> komunikat o błędzie -> koniec;

Otrzymywanie komunikatu:
Osobny wątek nasłuchuje na określonym porcie -> pojawia sie komunikat -> zostaje wykonany ruch -> zmieniamy flagę canMove na true -> wysyłamy komunikat zwrotny -> czekamy na wykonanie ruchu przez użytkownika.

Po co serwer?
Serwer dogaduje dwa programy klienckie. Jak działa:
Serwer oczekuje i nasłuchuje na ogólnym porcie -> pojawia się nowy klient -> zostaje mu nadany identyfikator -> zostaje utworzony wątek o nazwie takiej jak identyfikator klienta, od tego momentu klient jest traktowany indywidualnie -> dopisujemy go, wątek, do kolejki wolnych graczy
Pojawia się drugi klient -> sprawdzamy czy są wolni gracze ->
jeżeli nie ma to postępujemy jak wyżej;
jeżeli są -> wybieramy gracza z kolejki wolnych graczy jeden z wątków -> rejestrujemy w nim drugiego gracza -> wysyłamy powiadomienia do obu o rozpoczęciu gry;

Gra na serwerze:
Serwer odbiera komunikat -> sprawdza id -> odsyła do konkretnego wątku -> wątek przesyła komunikat dalej za pomocą odpowiednich obiektów.

Proste :) dzięki identyfikacji użytkowników wszytko może działać na jednym porcie na serwerze i jednym, porcie na kliencie :)

0

ok mam sobie klase

import java.io.Serializable;

public class Figury implements Serializable {
int[][] figury;
public Figury(int[][] figury){
this.figury=figury;
}
}

wysylam ja w aplecie do serwera dzieki:
Figury figur=new Figury(figury);
output.writeObject(figur);

i chce odczytac, tylko jak to zrzutowac prawidłowo zebym w drugim aplecie otrzymal tablice int[][]. Cannot convert from Object to int :)
</ort></quote>

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