Avatar billede Droa Seniormester
12. juni 2013 - 20:09 Der er 8 kommentarer og
1 løsning

Generelt Socket Programmering spørgsmål

Så jeg sad lidt og søgte på google efter et godt eksempel på en robust og gennemtestet måde at sætte sin Socket op på sin server.

Jeg er igang med at lege med DatagramSocket, for at lave en UDP Server Simulator til en af mine projektor.

Når jeg laver en Server eller Client normalt, laver jeg 2 tråde, en der tager imod Data, og en der Sender Data, som gemmes i synchronizedList's som jeg så tjekker i en 3. tråd som danner de events der nu skal laves.

Grunden til jeg bruger den methode, er pga den Blokkering som Recieve har, som jeg virkeligt hader.
er der ingen måde at tjekke om der er data, eller noget i den stil?
Avatar billede arne_v Ekspert
12. juni 2013 - 20:35 #1
Nu synes jeg at de flere traade er en rigtig god maade at goere det paa.

:-)

Men lad os komme til dit spoergsmaal.

DatagramSocket er et blocking API saa naar du receive'r saa blokker du indtil der er noget.

Hvis du ikke vil blokke, saa skal du kigge paa NIO (new er ret gammelt!).

Mere specifikt er den en klasse java.nio.channels.DatagramChannel som er et non blokking UDP API.

For noget eksempel kode valgte Google:

http://thushw.blogspot.com/2011/06/asynchronous-udp-server-using-java-nio.html
Avatar billede Droa Seniormester
12. juni 2013 - 21:06 #2
Mit spørgsmål var hvad for en måde der var den mest fejlsikre at bruge, selvom ting er gamle, kan de sikkert stadig virke lige så godt som det nye, men på et tidspunkt sker der vel noget Depricate af de gamler pakker, nu hvor både Java 8 er eller snart kommer i åben beta, og overgangen til 7'eren bliver et must.

Jeg har endnu ikke rigtigt tjekket de nye javadocs, men nu hvor du siger "gammel" bliver jeg lidt i tvivl, om jeg ikke bare burde holde mig til Blokking API'et, siden alle andre sprog næsten bruger den samme måde.

min tvivl var om jeg gjorde det rigtigt, med trådene, da det virkede lidt rodet at køre det sådan. men hvis det er en godkendt måde at lave sine socket sådan, så burde jeg jo nok ikke fixe noget der allerede virker helt fint :)

Mange tak for dit svar, hvis du ligger et svar, kommer der nogen point din vej
Avatar billede arne_v Ekspert
12. juni 2013 - 21:29 #3
NIO staar for New IO. NIO er i java.nio pakken i modsaetning til java.io pakken med de gamle blokking API (UDP API er dog i java.net).

NIO er ikke paa nogen maade for gammel. Der blev faktisk tilfoejet en masse til NIO.

Men bemaerkning var en lille vits omkring at New IO faktisk er fra februar 2002 og derme dikke rigtigt nyt laengere.

:-)
Avatar billede arne_v Ekspert
12. juni 2013 - 21:31 #4
Stort set alle sprog har baade blokking og non-blokking IO & netvaerk API'er.

Men generelt er blocking API'er simplere at bruge end non-blocking.

i .NET f.eks. VB.NET er der *Begin og *End metoderne til non-blocking IO.

Du kan ogsaa lave det i C/C++.
Avatar billede arne_v Ekspert
12. juni 2013 - 21:32 #5
generelt vil jeg sige at non-blocking er langt mere relevant for TCP end for UDP
Avatar billede arne_v Ekspert
12. juni 2013 - 21:32 #6
og svar
Avatar billede Droa Seniormester
18. juni 2013 - 12:07 #7
Tak for dit input, undskyld for det langesomme svar, jeg fik helt glemt at svare, men tak for dit input, jeg var lige nede og låne nogen bøger omkring begge begreber, og nogen andre methoder, der muligvis var brugbare.

Kan kun sige at Odense bibliotek er høstet for alt med java sockets ligenu :)
Avatar billede arne_v Ekspert
19. juni 2013 - 02:59 #8
Hvis du vil dykke dybere ned, saa proev evt. at hente source til Apache Commons Net.

Der maa vaere en del socket kode i den kode.
Avatar billede arne_v Ekspert
19. juni 2013 - 02:59 #9
Men grundliggende er plain sockets i Java ret nemt.

SSL sockets derimod kan godt drille en del med forskellige obskure detaljer.
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