23. juli 2001 - 14:56Der er
31 kommentarer og 1 løsning
Datagramsockets i internet explorer
Jeg er ved at lave et projekt hvor jeg bruger datagramsockets til at overføre data mellem forskellige maskiner. Jeg har en servermaskine (lige nu er det min egen, derfor bruger jeg getLocalHost()) som der kører en server på. der kan så være forskellige klienter rundt omkring, der skal kunne skrive ind til serveren og i dette tilfælde bare få et svar tilbage.
Hvis jeg sætter serveren i gang og kører klienten i appletvieweren går alting godt - pakken bliver modtaget af serveren, sendt tilbage og modtaget af klienten - men i internet explorer kan klienten hverken sende eller modtage. Hvad går der galt?
Koden ser sådan her ud: ********* Client.java *********
Jeg må indrømme, at jeg ikke lige selv har pillet ved det, og det lader til at der er nogle forskelligheder mellem hvordan jdk1.1 og jdk1.2 gør tingene, men der er med garanti nogen der har prøvet proceduren før:)
Jeg kører win98. Jeg tror godt at både client og server kan køre på samme maskine, det burde da være ligemeget. Men jeg har også prøvet at sætte serveren op på en anden maskine og det ville den heller ikke. Er der virkelig ikke nogen der har prøvet at signe en applet?
Jeg lavede projektet i Linux der var der ingen problemer. Men win 98 ved jeg ikke rigtigt. Man bruger det jo ikke til server, men har derimod en server af NT eller LINUX hvor så klienterne kan være win 98/95. Hvis du laver server på en anden maskine skal du huske at ændre IP og port nummer da 127.0.0.1 jo er rollback IP (eller hvad det nu hedder.) I C++ skal ip og port nummer stå på både client og server siden.
Mit problem er, at jeg skal bruge en løsning hvor klienten IKKE skal sætte noget op, hverken downloade filer eller indstille sikkerhedsrisikoer. På www.spil.tv2.dk findes der f.eks. spil (applets) der kan kommunikere uden at instille noget. Jeg har set det samme mange andre steder. Hvordan kan det lade sig gøre?
det er fordi den laver en socket tilbage til den server hvor den kom fra. Dette kan sagtens lade sig gøre, og så bruger man den samme socket til at kommunikere begge veje. Serveren sørger også for at sende frem og tilbage mellem flere klienter
Hvordan kan klienten lave en socket tilbage? Så skal den jo først have en packet fra serveren. Og den får den jo ikke bare uden videre. Jeg forstår ikke helt hvad du mener, kan du forklare det nærmere? Eventuelt med et kodeeksempel...
(Serveren i mit eksempel kan jo også håndtere flere klienter, der skal jo bare sendes svar til alle pakker på samme adresse.)
Din server vil bestå i af en ServerSocket på en given port, og oprette en ny tråd for hver indkommen request.
Din applet vil når den initialisere lave en normal Socket tilbage, så har du en forbindelse, hvor du både kan bruge InputStream og OutputStream til at kommunikere med.
Hvis en klient ønsker at kommunikere med en anden klient, så sker det gennem serveren
Kan man da godt lave en normal socket uden at få en SecurityException? Og er det nødvendigt at lave serveren om til at bruge ServerSockets? Og kan en sådan server godt holde til at der skal køre 200 forskellige brugere? Og har du et kodeeksempel?
jeg har ikke et specifikt kode eksempel, men der er massere rundt omkring på nettet. Alternativt, kunne det være en Servlet eller jsp der lå på din server, og så modtager den http requests fra dine klienter. Der er mange måder at løse problemstillingen på
nej, for i det øjeblik du laver en DatagramSocket, så erklærer du også at du er villig til at modtage pakker fra andre kilder en den server du kommer fra, og appletten skal derfor signes.
Jeg har kigget en smule på at signe applets, har ikke rigtig fået det til at spille, og har heller ikke lige tid til det, men inde på www.java.sun.com ligger der en masse god information.
Det er ikke nødvendigt at gøre noget ved din Applet, hvis du bruger en central server.
Jeg har brugt den MTEchoServer.java fra dit eksempel, og startet den på min maskine. Jeg har lavet nogle ændringer i EchoClient.java, så det er en applet der connecter istedet. Du kan se alt sammen her. http://opencms.el-lal.dk/java/index.html
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.