Avatar billede SandraNielsen Nybegynder
16. oktober 2011 - 17:36 Der er 14 kommentarer og
1 løsning

P2P i Java

Hej

Jeg synes jeg har ledt diverse steder efter svaret på hvordan jeg kommer igang med at lave et P2P program i Java, desværre uden held. Under min søgning fandt jeg en del information om Jxta, som jeg har lidt svært ved at definere. Derfor håber jeg på i kan hjælpe mig med at besvare 2 spørgsmål.

1: Hvad er definitionen på Jxta?
2: Hvor kan jeg komme i gang med at lave en P2P løsning i Java?

//Sandra
Avatar billede Blueeyez Mester
16. oktober 2011 - 18:34 #1
Du kan læse mere om JXTA her: http://en.wikipedia.org/wiki/JXTA

Så vidt jeg ved i notepad? (Hvad er dine kompetenser med java?)
Avatar billede arne_v Ekspert
16. oktober 2011 - 18:51 #2
re 1)

Java kommer med netvaerks support. Du kan selv definere en protokol og implmentere den. TCP eller UDP alt efter hvad du foretraekker.

Du kan ogsaa finde noget faerdigt som JXTA. JXTA findes her:
  http://java.net/projects/jxta

JXTA var ret hot for 6-10 aar siden. Idag er der ikke meget interesse for det.

En anden mulighed er at kigge lidt paa BitTorrent. Azereus/Vuze er lavet i Java.



re 2)

Installer JDK. Installer en Java IDE f.eks. Eclipse. Start med at programmere (jeg antager at du har en vis programmerings viden ellers vild et tage lidt tid at komme fra hello world til P2P!).
Avatar billede SandraNielsen Nybegynder
16. oktober 2011 - 19:18 #3
Vil prøve at læse det igen, synes bare ikke det gav mening i første hug.

Jeg har arbejde med Java i 3-4 år, Herunder basic java, JSP/Servlets, Swing og applets som jeg synes jeg mestre til middel eller derover. Dernæst har jeg det seneste år arbejdet med netværksprogrammering dog kun TCP og UDP forbindelser til client/Server.
Avatar billede SandraNielsen Nybegynder
16. oktober 2011 - 19:20 #4
Jeg synes bare ikke jeg kan finde tankegangen for at starte med en P2P. Det er måske mere den jeg søger PT. Sådan hvordan jeg kommer igang med selve kodningen. Hele mit miljø er allerede sat op med Java og Eclipse. :D
Avatar billede arne_v Ekspert
16. oktober 2011 - 19:39 #5
Hvis du kan lave client/server i Java saa kan du ogsaa lave P2P!

Du bruger alle de samme klasser og metoder.

Eneste forskel er at i.s.f. at der er 1 server og N clients saa er der M ligestillede noder.

Ligestillet betyder at de kan fungre baade som client og som server.
Avatar billede arne_v Ekspert
16. oktober 2011 - 19:42 #6
Det mest tricky er discovery.

Et par af de mange muligheder er:
* hver node har en konfigurations fil med de andre noder
* alle noder registrerer sig hos en kendt registration server og hver node henter info fra om de andre noder og snakker derefter direkte med dem
Avatar billede arne_v Ekspert
16. oktober 2011 - 19:46 #7
Lad os tage et klassisk chat eksempel.

client/server:

3 klienter har en Socket og connecter til 1 server med ServerSocket (med 3 acceptede connections)
en client sender besked til server
server sender besked til alle 3 klienter

P2P:

3 klienter finder hinandens IP addresser (konfig eller registration server eller noget andet)
alle klienter opretter en connection til alle de andre klienter
hver klient har derfor 2 Socket og 1 ServerSocket (med 2 acceptede connections)
klienterne sender nu direkte til hinanden
Avatar billede arne_v Ekspert
16. oktober 2011 - 19:46 #8
Hvis du vil igang med JXTA saa havde JavaWorld en seri artikler om det:

http://onjava.com/pub/a/onjava/excerpt/jxtaian_2/index1.html
Avatar billede SandraNielsen Nybegynder
16. oktober 2011 - 19:53 #9
Okay, jeg troede jeg skulle have en helt andet tankegang.

Bare for at specificere den helt ud, er jeg så forkert i nedenstående tankegang. (hvis jeg vælger dit løsningsforslag 1)

- Hver peer har en fil om de andre noder, dvs. port og IP.
- Når en peer logger på systemet, sender han/hun en besked til de respektive peers med opdateringer om egne opdaterede oplysninger.
- Herefter opretter jeg bare en almindelig Socket til den enkelte klient i stedet for (som i client/server) til serveren

Er det forkert tolket?
Avatar billede arne_v Ekspert
16. oktober 2011 - 20:03 #10
Ja.

Bortset fra at du nok skal have oprettet sockets inden der kan sendes noget som helst.
Avatar billede arne_v Ekspert
16. oktober 2011 - 20:03 #11
Hvis det er LAN only er der en tredie mulighed for discovery nemlig at lave en UDP broadcast med "her er jeg".
Avatar billede arne_v Ekspert
16. oktober 2011 - 20:06 #12
Hvis det er internet har du problemet med firewalls.

http://www.brynosaurus.com/pub/net/p2pnat/

har nogle tips til dette.
Avatar billede SandraNielsen Nybegynder
16. oktober 2011 - 20:14 #13
Det lyder fantastisk tusind tak for hjælpen. :D
Glæder mig til at prøve at sidde med.

Jeg har i hvert fald et udgangspunkt og jeg kan se løsningen.

Så er der bare den sidste ting. Hvordan jeg giver dig points. :D
Avatar billede arne_v Ekspert
16. oktober 2011 - 20:17 #14
jeg skal smide et svar
Avatar billede arne_v Ekspert
16. oktober 2011 - 20:18 #15
Et andet eksempel paa P2P i Java er Jini/JavaSpaces (som heller ikke blev en success).
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

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