Avatar billede boller47 Nybegynder
28. juni 2003 - 13:54 Der er 14 kommentarer og
1 løsning

spimpel chat med java

er der en der kendet et godt sted på nettet hvor der er nogle eksempler på hvordan men laver en simpel chat
jeg hade en gang en bog der beskrev det men den har jeg desverre ikke mere
Avatar billede Slettet bruger
28. juni 2003 - 13:56 #1
Er DU sikker på du mener JAVA og ikke JavaScript.... for det er IKKE simpelt (i konventionel forstand) at lave en chat i JAVA....?
Avatar billede arne_v Ekspert
28. juni 2003 - 13:56 #2
Avatar billede boller47 Nybegynder
28. juni 2003 - 14:56 #3
det er chat i java jeg mener det behøver bare ikke at væer meget omfattende dokumentation bare lige lidt til at komme i gang med så finde jeg nok ud af resten
Avatar billede trp79 Nybegynder
30. juni 2003 - 07:57 #4
Jeg har et eksempel på en meget simpel chat til at ligge, hvis det er noget der har interesse? Eksemplet indeholder:
Ingen GUI.
Det er "via sockets" (ikke rmi).
Man logger ind (valideres op mod db).

Vi lavede det i forbindelse med vores studie, hvor vi skulle lære lidt omkring hvordan man oprettede tråde.
Avatar billede boller47 Nybegynder
30. juni 2003 - 08:16 #5
det vil jeg meget gerne have lov til at se lidt nermer på dt er lige sådan noget jeg mangler
Avatar billede trp79 Nybegynder
30. juni 2003 - 08:33 #6
Det får du så her. Jeg har bare taget eksemplet som det er. Jeg har dog lige testet det og det funker...


Server.java

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

public class server
{
    Socket users[] = new Socket[50];
    int i = 0;
    static Socket incoming;

    public server()
    {

    }

    public void forbindelse(server s)
    {
        //Initializere netværks forbindelse
        try
        {
            ServerSocket serverSocket = new ServerSocket(8205);

            //Start uendelig løkke indtil information kommer
            while(true)
            {
                //acepter besked
                incoming= serverSocket.accept();

                users[i] = incoming;
                i++;

                thread(incoming, s);
            }
        }
        catch(Exception exc){System.out.println("fejl i server.java...: "+ exc.toString());}
    }

    public void thread(Socket incoming, server s)
    {
        //opret ny tråd
        chatThread ct= new chatThread(incoming, s);
        ct.start();
    }

    public static void main(String args[])
    {
        server s = new server();

        s.forbindelse(s);

    }
}

*******************************************************************************

chatThread.java (Når klient får forbindelse til server - oprettes tråd til håndtering af denne på server)

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

public class chatThread extends Thread
{
    //Serversocket vi skriver til
    Socket incoming;
    String brugernavn;
    String password;
    server s;
    //Socket users[];
    //int i;

    chatThread(Socket incoming, server s)
    {
        this.s= s;
        //this.i= i;
        //this.users= users;
        this.incoming= incoming;
        System.out.println("Tråd oprettet");
    }

    public void run()
    {
        //Validering af klient
        validering();

        //Luk forbidelsen
        try
        {
            incoming.close();
        }

        catch(Exception exc){System.out.println("Error!!!...efter lukket forbidelse:"+ exc.toString());}
    }

    public void validering()
    {
        try
        {
            //modtag input fra socket
            DataInputStream in = new DataInputStream(incoming.getInputStream());

            //skriv til socket
            PrintStream out = new PrintStream(incoming.getOutputStream());

            try
            {
                out.println("Forbindelse oprette til server");
                out.println("Indstast brugnavn");
                brugernavn = in.readLine();
                out.println("Indstast password");
                password = in.readLine();
            }
            catch(NoSuchElementException exc){System.out.println("Validering af klient fejl "+exc);}

            Db serverDb = new Db();
            if(serverDb.tjekKlient(brugernavn, password))
            {
                chat(in, out);//starter chat
            }

            else
            {
                out.println("false");
                incoming.close();
            }
        }

        catch(Exception exc){System.out.println("Error!!!...efter while i thread:"+ exc.toString());}
    }

    public void chat(DataInputStream in, PrintStream out)
    {
        out.println("true"); //Skriver via socket til klient at han er valideret, således klient går ind i chat metoden
        System.out.println(brugernavn +" er logget på");//Udskiver brugernavn
        out.println(brugernavn +" er logget på");//Skriver brugernavn til socket

        //Modtag input fra server til forbindelse lukkes
        boolean finished = true;
        while(finished)
        {
            try
            {
                String besked = in.readLine();

                //Skriver på server
                System.out.println(besked);

                for (int x=0; x<s.i; x++)
                {
                    //System.out.println(users[x]);
                    out= new PrintStream(s.users[x].getOutputStream());
                    out.println(besked);
                }
            }

            catch(NoSuchElementException exc){finished = false;}
            catch(IOException ex){/*evt håndter fejlen*/}
        }
    }
}

*******************************************************************************

Klient.java

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

public class klient
{
    //Netværk komponenter
    static Socket socket;
    //static BufferedReader inStream;
    static DataInputStream inStream;
    static BufferedReader in;
    static PrintStream outStream;

    klient()
    {
        try
        {
            //Åbner socket til serveren
            socket = new Socket("127.0.0.1", 8205);
            //Åbner for modtagelse fra serveren
            //inStream = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            inStream = new DataInputStream(socket.getInputStream());
            //Åbner for sending til serveren
            outStream = new PrintStream(socket.getOutputStream());

        }
        catch(Exception e)
        {
            System.out.println("Error!!!....:"+e.toString());
        }
    }

    public void validering(klient k)
    {
        boolean notValideret = true;

        while(notValideret)
        {
            try
            {
                System.out.println(inStream.readLine());//Udskriver teks (der er forbindelse til server
                System.out.println(inStream.readLine());//server spørger efter brugernavn
                k.in = new BufferedReader(new InputStreamReader(System.in));//keyboard aktiveret
                k.outStream.println(k.in.readLine());//skriver brugernavn til socket
                System.out.println(inStream.readLine());//server spørger efter password
                k.outStream.println(k.in.readLine());//skriver password til socket
                String StringNotValideret = inStream.readLine();//læser fra socket om klient er validere (true/false)

                if (StringNotValideret.equals("true"))//Klient valideret
                {
                    System.out.println(inStream.readLine());//udskriver at klient er logget på
                    notValideret=false;
                    k.chat(k);
                }
                else if (StringNotValideret.equals("false"))//Klient ikke valideret
                {
                    System.out.println("Forkert brugernavn eller password, genstart klienten....");
                    System.exit(0);
                }
            }
            catch(Exception e){System.out.println("Error!!!....:"+e.toString());}
        }

    }


    public void chat(klient k)
    {
        boolean chat= true;

        chatRead cr = new chatRead(k);
        cr.start();

        while(chat)
        {
            try
            {    //Skriver til server
                k.in = new BufferedReader(new InputStreamReader(System.in));
                String tast = k.in.readLine();
                k.outStream.println(tast);

                //Modtager fra server
                //System.out.println(inStream.readLine());
            }
            catch(Exception e){System.out.println("Error!!!....:"+e.toString());}
        }
    }

    public static void main(String args[])
    {
        klient k = new klient();
        k.validering(k);
    }
}

*******************************************************************************

chatRead.java (tråd der oprettes når klient starter - lytter på om der sendes noget fra serveren, dvs. hvis andre klienter har skrevet noget og trykke enter for at "broadcaste" det)

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

public class chatRead extends Thread
{
    klient k;

    chatRead(klient k)
    {
        this.k = k;
    }

    public void run()
    {
        while(true)
        {
            try
            {
                System.out.println(k.inStream.readLine());
            }
            catch(Exception exc){System.out.println("Fejl i klient tråd "+exc);}
        }
    }
}
*******************************************************************************

Db.java (håndterer forbindelsen til databasen - tjekker på om bruger findes i db)

import java.io.*;
import java.sql.*;

public class Db
{
    //forbindelsen til databasen
    Connection dbConnection;
    String bn;

    Db()
    {
        try
        {
            // get the JDBC-ODBC driver
            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
        }
        catch(ClassNotFoundException exc){System.out.println("Error loading driver!");}

        // now create the connection to the DB
        String url = "jdbc:odbc:ServerDb";

        // make the connection to the database
        try
        {
            dbConnection = DriverManager.getConnection(url, "", "");
        }
        catch(SQLException exc){System.out.println("Error! - " + exc.toString());}
    }

    public synchronized boolean tjekKlient(String brugernavn, String password)
    {
        try
        {
            Statement statement = dbConnection.createStatement();
            String s="select Brugernavn "+
                    "from Brugertabel "+
                    "where Brugernavn ='"+brugernavn+"' AND Password ='"+password+"'";
            ResultSet rs = statement.executeQuery(s);

            while (rs.next())    //hvis der er mere data i databasen
            {
                bn=rs.getString("Brugernavn");    //hentes data fra databasen vha. get-metoder
                System.out.println(bn);
            }
            dbConnection.close();
        }
        catch(Exception e){System.out.println("Fejl i Db.java i metoden TjekKlient.... "+e);}

        if(bn!=null)
        {
            bn=null;
            return true;
        }
        else
        {
            bn=null;
            return false;
        }
    }

//    public static void main(String args[])
//    {
//    Db a = new Db();
//    System.out.println(a.tjekKlient("Lasse","Hest"));
//    }
}

Håber du kan bruge det, mvh
Torben
Avatar billede boller47 Nybegynder
01. juli 2003 - 06:58 #7
mange tak for det nu vil jeg stille og roligt side og studer koden så håber jeg at jeg har fanget den røde tråd når jeg er færdig
Hilsen Boller47
Avatar billede fun22 Nybegynder
19. januar 2006 - 20:20 #8
trp79 >> Hvad gør man når man har kompilet det for at få det til at køre på serveren?
Avatar billede trp79 Nybegynder
19. januar 2006 - 21:26 #9
Hej fun22
Har du oprettet en ServerDB (odbc) indeholdende tabellen Brugertabel med felterne brugernavn og Password?
Hvis du har det, så prøv i første omgang både at køre serveren og klienten på samme maskine - localhost (127.0.0.1)
Avatar billede fun22 Nybegynder
20. januar 2006 - 13:23 #10
nej det har jeg ikke? Hvordan gør jeg det? Er det bare en mysql eller hvad?
Avatar billede trp79 Nybegynder
21. januar 2006 - 07:50 #11
I ovenstående tilfælde brugte jeg vist en MS-Access db. Der skal laves en JDBC-ODBC bro i windows - se hvordan du gør det her: http://javabog.dk/OOP/kapitel20.jsp
Avatar billede fun22 Nybegynder
23. januar 2006 - 18:25 #12
Hvordan skal den database bygges op, og hvad skal den hedde?

Når jeg åbner en af class filerne eg. klient.class eller server.class vicer den bare en grå kasse?

Bruger det her til at hente classen med:

<applet code="server.class" width="256" height="256">
  Denne side kræver Java!
</applet>
Avatar billede trp79 Nybegynder
23. januar 2006 - 21:15 #13
Fra Db.java:
String s="select Brugernavn "+
                    "from Brugertabel "+
                    "where Brugernavn ='"+brugernavn+"' AND Password ='"+password+"'";

Tabelnavn: Brugertabel
Egenskaber: Brugernavn, password

Har du selv lavet en GUI til siden du benytter en applet?
Mit eksempel ovenfor er uden GUI - det skal eksekveres i en dos-promt:
javac *.java
java Server
java klient
Avatar billede fun22 Nybegynder
23. januar 2006 - 22:04 #14
okay. Er det svært at lave en gui til det ?
Avatar billede trp79 Nybegynder
23. januar 2006 - 22:08 #15
Hvis du ikke har arbejdet med java før denne tråd, så er det nok lidt uoverskueligt at kaste sig ud i.
Men hvis du vil igang med java, så kunne det jo være et mål for dig at ende med et hjemmestrikket chat-program - med tilhørende gui.

http://Javabog.dk er et godt pædagogisk sted at starte...
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