Avatar billede bumle90 Nybegynder
28. februar 2002 - 10:54 Der er 12 kommentarer og
1 løsning

netpakken i java

Hej vi skal bruge netpakken i java. Vi prøver at bruge klassen InetAddress, man når vi prøver at oprette et object af denne får vi følgende fejl :

icqmain.java:11: InetAddress() is not public in java.net.InetAddress; cannot be accessed from outside package
       
Således er vores kode :
InetAddress ip=new InetAddress();

Hvad vil det helt konkret sige? Og hvordan omgår vi dette problem? Tak på forhånd
Avatar billede carstenknudsen Nybegynder
28. februar 2002 - 10:58 #1
InetAddress skal bruges gennem en af de statiske
metoder hvor I i argumentlisten angiver hvilken
adresse i er interesseret i:
InetAddress address = InetAddress.getByName("www.dtu.dk");
Der er også andre metoder hvis i har adressen på
et andet format.
Avatar billede carstenknudsen Nybegynder
28. februar 2002 - 10:59 #2
Forresten har I i jeres eksempel ikke angivet hvad
I vil have adressen af. I kan benytte InteAddress.getLocalHost()
hvis det er maskinen I er på i er interesseret i.
Avatar billede bumle90 Nybegynder
28. februar 2002 - 11:06 #3
Det er fordi vi gerne vil prøve at lave en simpel form for ICQ på vores lille lokale netværk. Så vi skal i første omgang bare have forbindelse mellem 2 computere :)
Avatar billede carstenknudsen Nybegynder
28. februar 2002 - 11:19 #4
Har I behov for yderligere forklaring? Under alle
omstændigheder skal I kende navnene/adresserne
på computerne.
Avatar billede bumle90 Nybegynder
28. februar 2002 - 12:18 #5
Ja...det går lidt sløvt med det. Vi har ip-addressen på de(i første omgang) 2 computere vi vil have forbindelse mellem. Men hvordan skal man så gøre helt konkret hvis man gerne vil sende en datapakke mellem 2 computere? Hvilken klasse(er) skal man bruge? Ud fra hvad vi er kommet frem til er der klasserne DatagramPacket og DatagramSocket og INetAdress som der primært skal bruges. Er vi helt forkert på den eller hvordan?
Avatar billede carstenknudsen Nybegynder
28. februar 2002 - 12:27 #6
I den situation vil det være bedst hvis I etablerer en
socket forbindelse mellem de to computere, så
kan I sende vilkårlige (næsten) Java objekter
mellem de to computere. Den ene starter som
server med ServerSocket klassen og kalder accept
metoden der venter til nogen etablerer en forbindelse
ved at oprette en Socket til den aktuelle maskine
på den port ServerSocket'en er sat op på. Klienten
har nu en Socket og serveren har ligeledes en Socket
der returneres af accept metoden. Fra en Socket kan
i få en Input- og en OutputStream så de to Socket
holdere kan kommunikere med hinanden via en protokol
som I definerer, dvs. hvem sender noget først etc.
Avatar billede bumle90 Nybegynder
28. februar 2002 - 13:11 #7
Når man nu skal oprette en socket på klientmaskinen. Skal man så bruge den klasse der hedder DatagramSocket ? Den der hedder Socket er nemlig abstract, og på DatagramSocket er der også en metode der hedder connect...
Avatar billede bumle90 Nybegynder
28. februar 2002 - 13:38 #8
den er ikke abstract...jeg mente at den har protected access i java.net.Socket. Får følgende fejl når jeg vil oprette en instans af denne

icqmain.java:24: Socket() has protected access in java.net.Socket
Avatar billede carstenknudsen Nybegynder
28. februar 2002 - 14:20 #9
Nej, du skal ikke bruge DatagramSocket, benyt
Socket og ServerSocket som beskrevet ovenfor.
Du skal fortælle hvortil din Socket skal forbinde
i konstruktor kaldes. Det giver ikke mening at sige
new Socket() (ligesom det ikke giver mening
at sige new InetAddress()). Du skal sige til hvad:
Socket socket = new Socket("www.dr.dk",80);
opretter en socket til Danmarks Radios web server.
Avatar billede bumle90 Nybegynder
28. februar 2002 - 14:33 #10
Har det noget at sige hvilken port man connecter til? Vi har på den ene computer skrevet

Socket a=new Socket("10.12.45.12",7777);

og på den anden maskine har vi skrevet

    ServerSocket serverstub=new ServerSocket(7777);
    Socket commonstub=serverstub.accept();

Ser det umiddelbart rigtigt ud?
(Du skal nok få flere end 15 point bagefter forresten hvis du vil)
Avatar billede bumle90 Nybegynder
28. februar 2002 - 14:34 #11
Og hvordan kan man se om den ene computer har connectet til den anden ?
Avatar billede carstenknudsen Nybegynder
28. februar 2002 - 14:38 #12
Ja, det ser fint ud hvis det er den rigtige adresse,
men det I bedst. Husk at serveren selvfølgelig
skal startes først. Dernæst er det bare at sende beskeder
via streams:

Socket socket = ....;
InputStream is = socket.getInputStream();
OutputStream os = socket.getOutputStream();
PS Man skal hente input- og output streams i
den rigtige rækkefølge så de to processer
ikke kommer til at hænge.
Avatar billede carstenknudsen Nybegynder
28. februar 2002 - 14:39 #13
I kan skrive noget ud til skærmen efter accept metoden
har returneret.
PS Der kan selvfølgelig smides masser af IOExceptions,
så dem skal i catch'e.
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