Avatar billede walker Nybegynder
24. marts 2002 - 11:16 Der er 7 kommentarer og
1 løsning

Thread kører Socket & ServerSocket...

Hej alle Java programører..
Jeg har et problem. Jeg er iang med at lave en server med ServerSocket-klassen. Ok, hvad gør jeg:
Starter en ny Thread med metoden run()... som kører min procedure 1. gang... Den socket som lytter til min port, skal jo helst lytte heletiden, så derfor laver jeg et loop, men hvad sker der så??? Den trækker resourcer på comp'en... BIG TIME... Why? og hvordan laver jeg det så?

MVH Walker
Avatar billede carstenknudsen Nybegynder
24. marts 2002 - 11:43 #1
Din server bruger vel accept metoden
på ServerSocket klassen til at
lytte på porten indtil en forbindelse
kommer. Der får du en Socket returneret
og du kan så servicere denne i en tråd.
Dette burde ikke sluge megen cpu tid.
Er det sådan du griber tingene an?
Avatar billede walker Nybegynder
26. marts 2002 - 07:01 #2
carstenknudsen << Ja, det er præcis hvordan den kører... men efter man har modtaget en Socket, skal jeg så lytte på denne. Det har jeg gjort således:
while ( socket.available() < 0 ) { }
Det er dette som jeg tror trækker alle resourcerne...
Avatar billede carstenknudsen Nybegynder
26. marts 2002 - 14:11 #3
Efter at du har modtaget en socket
fra accept metoden skal du ikke
lytte mere, så skal du bare modtage
og sende de beskeder som din protokol
nu foreskriver. Jeg går udfra at du
ved hvad du kan forvente af information
fra både klient og server side.
Avatar billede walker Nybegynder
26. marts 2002 - 15:12 #4
Applikationen skal bruges til chat. Det er ikke noget problem at sende beskeder gennem Socket, men problemet er jeg jo ikke ved hvornår der modtages beskedder gennem den. Derfor må jeg checke med motoden (socket.available()) heletiden, for at se om der skulle være beskeder på linien. Dette må jeg jo gøre med et loop, eller hva? Og det er der problemet ligger...
Avatar billede carstenknudsen Nybegynder
26. marts 2002 - 16:27 #5
Hvis det er strenge som der sendes
kan du jo bare læse dem, så venter
den selv til der kommer input.
InputStream is = ...; // fra Socket
InputStreamReader isr = new InputStreamReader( is );
BufferedReader reader = new BufferedReader(isr);
String s = reader.readLine();
readLine vil så returnere når der er
noget at returnere.
Avatar billede walker Nybegynder
28. marts 2002 - 16:06 #6
Ok... Det må jeg prøve... Du skal nok få dine points når jeg har fået testet det...

Er det bare mig, eller er java for langsom til større programmer?
Avatar billede carstenknudsen Nybegynder
28. marts 2002 - 18:53 #7
Java burde ikke være for langsom til
større programmer; husk at så snart
du kører noget med nettet er der mange
andre faktorer der er med til at bestemme
svartider, det har ikke kun med dit
program at gøre.
Avatar billede walker Nybegynder
28. marts 2002 - 21:38 #8
I know... Jeg ved godt hvilke faktorer som har betydninger, og alligevel syntes jeg generelt java programmer kører for langsomt... Det har selvfølig meget indflydelse, at bytecode'en compiles runtime, via VM, men jeg syntes det sløver for meget...
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester