Avatar billede petersss Nybegynder
08. februar 2004 - 19:29 Der er 7 kommentarer og
3 løsninger

Sockets programmering

Mit overordnede formål er at oprette en server, der tager imod socketklienter, gemmer deres Sockets, så der på vilkårligt tidspunkt kan sendes data til en bestemt klient, og opretholder forbindelsen.

Jeg har implementeret dette efter den metode sun anbefaler,dvs. jeg opretter en thread for hver klient. Denne thread verificerer klienten, og hvis den må logge ind, tilføjes den til en vector der ligger i en anden klasse.
Problemet er, at når thread delen er færdig (og klientens socket tilføjet vectoren i den eksterne klasse, disconnectes denne.
Er det umuligt at opbevare klienternes sockets på denne måde? Hvordan skal dette så gøres?
Avatar billede Slettet bruger
08. februar 2004 - 19:40 #1
Det ville være lettere at guide dig, hvis du postede noget kode...MEN... du skal huske at gemme din reference (variabel) til socket'en i et scope, således du ikke mister den, når tråden "løber ud"....

Håber det hjalp, hvis ikke - så post noget kode :-)
Avatar billede petersss Nybegynder
08. februar 2004 - 19:59 #2
Her er nogle forkertede versioner af klasserne:
//KODE START

public Driver()
...
  Log log = new Log();
  ClientAdmin clientAdmin = new ClientAdmin(log);
      try {
        sock = new ServerSocket(Const.PORT);
        while (true) {
          Authentication client = new Authentication(sock.accept(),clientAdmin, log);
        client.start();
      } ...

//KODE SLUT
Authentication extends thread, Her undersøges om klienten er gyldig, hvis den er, kaldes clientAdmin.addClient(), som tilføjer sock.accept() til en linkedlist (ikke en vector, som jeg tidligere kom til at skrive, (ikke at det gør nogen forskel til mit formål)).
Herefter afsluttes Authentication threaden, og klienten disconnectes (som jeg jo ikke vil have).

Jeg har ikke gemt socket'en i et scope som du nævner, og det er nok der problemet ligger. Hvordan gøres dette?
Avatar billede repsak Nybegynder
09. februar 2004 - 17:18 #3
Hvad laver Authentication? Hvis den ikke kører en while(true) eller lign vil den jo hurtigt eksekvere koden og disconnecte.
Avatar billede petersss Nybegynder
10. februar 2004 - 10:41 #4
Det er netop det der sker! Hvordan kan socketen fastholdes, således at jeg altid kan få kontakt til netop denne, når jeg ønsker dette?
Avatar billede repsak Nybegynder
10. februar 2004 - 11:20 #5
nu har jeg ikke lige et eksempet her, men noget i stil med:

BufferedReader input = new BufferedReader(new InputStreamReader(forbindelse.getInputStream()));
String string;
while(true){
string = input.readLine();
doSomething(string);
}
Avatar billede repsak Nybegynder
10. februar 2004 - 11:21 #6
det kan laves på flere måder. Du kan lige skrive hvis du skal bruge et bedre eksempel :-)
Avatar billede petersss Nybegynder
10. februar 2004 - 18:51 #7
Hmm, det virker lidt som en hovsa løsning, at lade dem alle stå i uendelige løkker, kan det virkelig ikke gøres på andre måder?
Avatar billede petersss Nybegynder
10. februar 2004 - 18:53 #8
desuden skal jeg også kunne skrive til en vilkårlig klient på vilkårlige tidspunkter, hvordan implementeres dette så?
Avatar billede petersss Nybegynder
11. februar 2004 - 20:29 #9
Hvis i er uenige med antal point må i skrive til mig
Avatar billede repsak Nybegynder
12. februar 2004 - 23:00 #10
1) således kan du også skrive til alle klienter - også individuelt.
2) du er nødt til at have en form for løkke. plejer at bruge
while(run). Så vidt jeg husker laver input.readLine ikke buzy waiting
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

IT-JOB

Forsvarsministeriets Materiel- og Indkøbsstyrelse

Driftstærk IT-profil til Forsvarsministeriets Materiel- og Indkøbsstyrelse

Forsvarsministeriets Materiel- og Indkøbsstyrelse

Senior Platform Engineer

Netcompany A/S

IT Consultant