Avatar billede simonsenpq Nybegynder
13. marts 2003 - 10:32 Der er 3 kommentarer og
1 løsning

Tilgå en liste fra en en tråd

Jeg er i forbindelse med en lille øvelse ved at lave et lille chatprogram. Jeg har bla. lavet en server og en tilhørende tråd. Hver gang en klient logger på serveren oprettes en tråd og trådene lægges i en hægtet liste.

Mit problem er nu, at når jeg fra tråden vil tilgå listen får jeg nedenstående fejl. Hvad er der galt?

.\ChatTraad.java:35: non-static variable klienter cannot be referenced from a static context
                for(int i=0; i < Server.klienter.size(); i++)
                                                      ^
.\ChatTraad.java:37: non-static variable klienter cannot be referenced from a static context
                    aktuel = (ChatTraad)Server.klienter.get(i);
                                                                  ^
2 errors
----------------------------------------
Server-klassen ser således ud:

import java.net.*;
import java.io.*;
import java.util.*;

public class Server
{
    private int serverPort = 8888;
    public LinkedList klienter = new LinkedList();

    public Server()
    {
        startServer();
    }

    private void startServer()
    {
        System.out.println("Dette er serveren. Venter...");

        try
        {
            ServerSocket listenSocket = new ServerSocket(serverPort);

            int c = 0;
            while(true)
            {
                Socket client = listenSocket.accept();
                c++;
                ChatTraad ct = new ChatTraad(client, c);
                klienter.add(ct);//tilføjer den nye klient til listen
                ct.start();
            }
            //listener.close();
        }
        catch (IOException e)
        {
            System.out.println("Port "+serverPort+ "er optaget");
        }
    }

    public static void main (String [] args)
    {
        new Server();
    }

}
---------------------------------------
ChatTraad:

import java.io.*;
import java.net.*;
import java.util.*;

public class ChatTraad extends Thread
{
    private int id;
    private DataInputStream in;
    private DataOutputStream out;
    private Socket clientSocket;
    private ChatTraad aktuel;

    public ChatTraad (Socket clientSocket, int id)
    {
        this.clientSocket = clientSocket;
        this.id = id;
    }

    public void chat()
    {
        try
        {
            in = new DataInputStream(clientSocket.getInputStream());
            out = new DataOutputStream(clientSocket.getOutputStream());
            out.writeUTF("Velkommen til Peters server...!\n");

            while (true)
            {
                String data = in.readUTF();
                System.out.println("Klient " +id+ ": " +data);
                out.writeUTF("\nFølgende blev modtaget fra serveren: " +data+"\n");

                for(int i=0; i < Server.klienter.size(); i++)
                {
                    aktuel = (ChatTraad)Server.klienter.get(i);
                    System.out.println("Klient id:" +aktuel.id);
                }
            }
        }
        catch (IOException e) {}

        try
        {
            clientSocket.close();
        }
        catch (Exception e){}
    }

    public void run(Socket clientSocket, int id)
    {
        ChatTraad ct = new ChatTraad(clientSocket, id);
        ct.chat();
    }
}
Avatar billede soreno Praktikant
13. marts 2003 - 10:43 #1
For at det skal kunne lade sig gøre skal variablen erklæres static:
public static LinkedList klienter = new LinkedList();
Avatar billede simonsenpq Nybegynder
13. marts 2003 - 10:55 #2
Hehe... det havde jeg lige brugt et par timer på...
Tak for hjælpen - hvis du laver et svar, giver jeg point :-)
Avatar billede soreno Praktikant
13. marts 2003 - 11:00 #3
Jowda :-)

Det skulle vel aldrig være "Bjarnes socket server opgave" ?
Avatar billede simonsenpq Nybegynder
13. marts 2003 - 11:05 #4
Nej, det er bare en sideløbende øvelsesopgave i forbindelse med et kursus i distribuerede systemer.
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