Avatar billede topydopy Nybegynder
20. januar 2003 - 16:06 Der er 53 kommentarer og
1 løsning

Java chat

Jeg ved godt man relativt nemt kan finde kildekoden til en java chat på nettet, men dem jeg har fundet har absolut ikke været lige til at kompilere og køre, hvilket overrasker mig. Jeg vil derfor høre om nogle her har source koden til en simpel chat, der understøtter http,RMI og socket, som de vil dele med mig. Meget gerne må der også være en kompileret version inkluderet (som virker!!!). 100 point uddeles.
Avatar billede topydopy Nybegynder
20. januar 2003 - 16:19 #1
Det bør understreges, at chatten skal være en applet/servlet på nettet.
Avatar billede arne_v Ekspert
20. januar 2003 - 16:35 #2
Avatar billede topydopy Nybegynder
20. januar 2003 - 18:34 #3
Umiddelbart virker det ikke som der er source kode med i nogle af disse eksempler?
Avatar billede arne_v Ekspert
20. januar 2003 - 18:40 #4
Jeg ville have troet at alle dem der var "free" fulgte source koden
med.

Og dem der siger GPL licens skal have kilde-teksten tilgængelig.
Avatar billede magoo20000 Nybegynder
20. januar 2003 - 20:44 #5
Jeg mener at have en liggende - ser efter i morgen formiddag på arbejde:)
Avatar billede magoo20000 Nybegynder
20. januar 2003 - 23:15 #6
Avatar billede topydopy Nybegynder
21. januar 2003 - 10:55 #7
De få med GPL licens virker enormt kompliceret men tak for tippet.
magoo havde du en på dit arbejde ?:)
Avatar billede topydopy Nybegynder
21. januar 2003 - 16:16 #8
Nu har jeg selv fundet en her:
http://www.servlets.com/jservlet2/examples/ch10/index.html

Stammer vist fra en bog...

Men jeg har problemer med at kompilere...
Avatar billede arne_v Ekspert
21. januar 2003 - 16:44 #9
Hvilke problemer ?
Avatar billede topydopy Nybegynder
21. januar 2003 - 17:12 #10
Når jeg har lagt de filer ned i på min disk, i samme bibliotek og forsøger at kompilere får jeg 41 fejl.
Jeg har også pakket com.oreilly.servlet ud og det er vist dem bytecode fortolkeren ikke kan finde...mao. det må igen være den fu...... classpath. Måske du kan arne_v?
Avatar billede arne_v Ekspert
21. januar 2003 - 17:30 #11
download både chat filer og o'reilly zip til samme directory
unzip o'reilly zip
javac -classpath classes;\j2sdkee1.3.1\lib\j2ee.jar *.java

Og så compiler det hos mig (med en warning om brug af depracated feature).
Avatar billede arne_v Ekspert
21. januar 2003 - 17:32 #12
Og et svar hvis du skulle få lyst til at give lidt point.
Avatar billede topydopy Nybegynder
21. januar 2003 - 23:33 #13
arne du skal nok få pointene, men jeg har stadig lidt problemer og håber du kan hjælpe igen:) :

Mit java bibliotek ligger på d:\j2sdk14
jeg har pakket orielly zip ud i d:\chat , så jeg har \src og \doc m.m. i d:\chat.

Jeg kører så følgende:
javac -classpath classes;\j2sdk14\lib\j2ee.jar *.java

jeg får desværre stadig fejl. Det er dog nede på 19, hvilket da er fremgang.
Avatar billede topydopy Nybegynder
21. januar 2003 - 23:35 #14
bemækr jeg har ikke nogen j2ee.jar i mit lib bibliotek i j2dk14
Avatar billede arne_v Ekspert
21. januar 2003 - 23:35 #15
Står du i d:\chat og er der et classes directory under det ?

Eksisterer \j2sdk14\lib\j2ee.jar ?

(det er ikke JDK med J2EE kittet der har den fil !)
Avatar billede angam Nybegynder
21. januar 2003 - 23:36 #16
Jeg kan anbefale denne chat: http://sourceforge.net/projects/llamachat/

Den er open-source, og her kørte den bare i første hug - og sp er der scripts med til kompilering under Linux.
Du skal dog være opmærksom på at den kræver jdk 1.4.x for at køre - selvsamme gælder altså også applet'en, der kræver at brugeren har jre 1.4.x installeret.
Avatar billede topydopy Nybegynder
22. januar 2003 - 00:11 #17
Til arne_v: Jeg står i d:\chat og der ligger de udpakkede biblioteker fra zippen nemlig: classes,doc,lib,src og desuden de enkelte java source filer(7 ialt). j2ee.jar har jeg ikke. Hvilken java version skal jeg hente har du et link?

Til angam: Tak for dit link ,jeg venter dog lige med at kikke på denne før jeg ved om det andet virker.
Avatar billede topydopy Nybegynder
22. januar 2003 - 00:16 #18
Til angam: Hvad kræver det af serveren at for at kunne køre denne chat?
Avatar billede angam Nybegynder
22. januar 2003 - 00:24 #19
Jeg har testet serverdelen på både Windows 2000 og Redhat Linux, men ikke ligefrem stress-testet den, så jeg ved ikke hvor mange systemressourcer den tager - men umiddelbart ser det ganske fornuftigt ud.

På Linux skal der desuden køre en X11-server (selve chatserveren er konsolbaseret, men den bruger åbenbart nogle X11-libs). Og endeligt: jdk1.4.x.
Avatar billede arne_v Ekspert
22. januar 2003 - 08:00 #20
Du snupper den fra http://java.sun.com/j2ee/sdk_1.3/ !
Avatar billede topydopy Nybegynder
22. januar 2003 - 12:56 #21
Jeg har forsøgt at hente den fra 3 forskellige mirrors, men fejl hele tiden under udpakningen. Jeg har prøvet at installere på to computere. øv.
Avatar billede arne_v Ekspert
22. januar 2003 - 13:40 #22
Hvis du kan vente til i aften, så kan jeg smide den på
min server og så kan du prøve derfra - eller vi kan forsøge
via email).
Avatar billede topydopy Nybegynder
22. januar 2003 - 14:02 #23
Tak for tilbuddet måske jeg benytter mig af det. Nu prøver jeg lige i linux.
I tilfælde af at jeg får det installeret i linux, hvad er så kommandoen?
Avatar billede arne_v Ekspert
22. januar 2003 - 14:17 #24
javac og javakommandoerne er de samme under Linux som under
Windows med en lille bitte forskel. Man bruger : (kolon)
i.s.f. ; (semikolon) til at adskille elementerne i classpathen.

Altså:
  javac -classpath classes:\j2sdk14\lib\j2ee.jar *.java
Avatar billede arne_v Ekspert
22. januar 2003 - 18:13 #25
Har du fået fat i j2ee.jar ?

Iøvrigt hvis du har fået fat i den til Linux så kan du jo bare
FTP'e den (binært) til dit Windows system.
Avatar billede topydopy Nybegynder
22. januar 2003 - 23:16 #26
Jeg arbejder på at få jsdk til at køre i linux (RH 8.0). Jeg vender tilbage så snart jeg har nyt. Tak for interessen!
Avatar billede topydopy Nybegynder
23. januar 2003 - 17:26 #27
Tak arne_v og her er 100 fortjente point!
Avatar billede topydopy Nybegynder
23. januar 2003 - 17:27 #28
nu bliver mit næste problem hvordan jeg får den afprøvet:---)
Avatar billede arne_v Ekspert
23. januar 2003 - 17:30 #29
Det er en servlet.

Så du skal vel først og fremmest have en servlet container
f.eks. Tomcat.
Avatar billede topydopy Nybegynder
25. januar 2003 - 01:22 #30
arne_v du har vel tilfældigvis ikke forsøgt dig og fået det til at virke? Jeg prøvede selv at hente JRun til windows og køre den derfra, men det kunne jeg ikke få det til at virke. Derefter forsøgte jeg mig med www.mycgiserver.com, der er en servlet hosting men nej heller ikke. Temmelig frusterende...
Avatar billede arne_v Ekspert
25. januar 2003 - 14:28 #31
Hvorfor ikke bruge Tomcat ?  Det er jo ereference implementation for
servlet containere !

Deloyer du rigtigt ? Altså i det rigtige directory ?
Avatar billede topydopy Nybegynder
25. januar 2003 - 14:45 #32
Ok jeg prøver med Tomcat, vender lige tilbage.
Avatar billede topydopy Nybegynder
25. januar 2003 - 23:54 #33
Jeg har fulgt følgende opsætnings vejledning af Tomcat:
http://www.moreservlets.com/Using-Tomcat-4.html

men bliver ved med at få at vide, at serveren ikke eksisterer når jeg prøver http://localhost:8080 (jeg har ikke ændret porten).
Avatar billede arne_v Ekspert
25. januar 2003 - 23:56 #34
Øh.

Jeg kiggede lige på den vejliedning.

Og det er efter min mening mere en vildledning !

unzip Tomcat zip
gå til dets bin directory
skriv startup

og så kører den !
Avatar billede topydopy Nybegynder
26. januar 2003 - 00:11 #35
Meget mystisk, at min så ikke virker. Jeg har sat CATALINA_HOME = tomcat_dir
JAVA_HOME og CLASSPATH i miljø-variabler i win2k.
Jeg er spejlblank på hvad fejlen kan være...
Avatar billede arne_v Ekspert
26. januar 2003 - 00:15 #36
Det er må sgu da også være irriterend eat være ramt af så mange
problemer der jo slet ikke har noget at gøre med det primære
mål, nemlig at få en chat server op at køre.

Klokken er mange men jeg kan godt prøve og kigge på det imorgen
og se om jeg kan komme med en skud-sikker vejledning.
Avatar billede topydopy Nybegynder
26. januar 2003 - 00:23 #37
Ja, jeg er ved at være godt træt af det her l***.
Indrømmet, jeg er ny til servlets og har aldrig arbejdet med tomcat, men at der skulle komme så mange simple forhindringer, havde jeg ikke regnet med.

Tak igen:) og sov sødt;)
Avatar billede topydopy Nybegynder
26. januar 2003 - 13:18 #38
Jeg fik det til at virke på en anden computer. Der gik det glat igennem ligesom du sagde.
Mit spørgsmål er nu, hvordan kommer jeg videre (hvordan får jeg afprøvet chatten)?
Avatar billede arne_v Ekspert
26. januar 2003 - 14:14 #39
Godt.

Nu skal du jo så have deployet chat serveren.

Og det ser stærkt ud som om der ikke er nogen vejledning med.

Skam over dem.

Der er en generel beskrivelse om deploy på Tomcat på:
  http://jakarta.apache.org/tomcat/tomcat-4.1-doc/appdev/deployment.html
Avatar billede topydopy Nybegynder
26. januar 2003 - 21:17 #40
Jeg kikker på det, men hvis der pludselig ligger en mail i din postkasse fra eksperten om java chat spørgsmålet, så ved du hvorfor;).

Endnu engang mange tak!
Avatar billede topydopy Nybegynder
28. januar 2003 - 18:23 #41
Øv jeg kan ikke få det til at virke.

arne_v: Der 100 nye piller, hvis du kan få det til at køre og indvige mig I hvordan du gjorde :).
Avatar billede arne_v Ekspert
28. januar 2003 - 20:21 #42
Jeg vil prøve og kigge på det.
Avatar billede arne_v Ekspert
28. januar 2003 - 21:48 #43
Jeg har fået det til at virke. Efter at have rettet mange steder.

Download denne ZIP http://80.199.19.48/arne/chat.zip, udpak
den, build, kopier chat.war til Tomcats webapps directory,
start Tomcat, connect til http://localhost:8080/chat/ChatDispatcher
og vælg HTTP !
Avatar billede arne_v Ekspert
28. januar 2003 - 21:52 #44
Jeg har lavet en web-app directory struktur og flyttet
tingene på plads.

Jeg har lavet en web.xml:

<?xml version="1.0"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN" "http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">
<web-app>
    <servlet>
        <servlet-name>ChatDispatch</servlet-name>
        <servlet-class>ChatDispatch</servlet-class>
    </servlet>
    <servlet>
        <servlet-name>ChatServlet</servlet-name>
        <servlet-class>ChatServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>ChatDispatch</servlet-name>
        <url-pattern>/ChatDispatch</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>ChatServlet</servlet-name>
        <url-pattern>/ChatServlet</url-pattern>
    </servlet-mapping>
</web-app>

Jeg har rettet i ChatDispatcher så den bruger /chat i pathen:

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class ChatDispatch extends HttpServlet {

  public void doGet(HttpServletRequest req, HttpServletResponse res)
                              throws IOException, ServletException {
    res.setContentType("text/html");

    if (!req.getParameterNames().hasMoreElements()) {
      // There were no request parameters.  Print a welcome page.
      printWelcomePage(req, res);
    }
    else {
      // There was at least one request parameter.
      // Print a page containing the applet.
      printAppletPage(req, res);
    }
  }

  // The welcome page greets the reader and has a form where the user
  // can choose an applet-servlet communication method.
  private void printWelcomePage(HttpServletRequest req,
                                HttpServletResponse res)
                    throws IOException {
    PrintWriter out = res.getWriter();
    String me = req.getServletPath();

    out.println("<HTML>");
    out.println("<HEAD><TITLE>");
    out.println("Welcome to an Absurdly Simple Chat");
    out.println("</TITLE></HEAD>");
    out.println();
    out.println("<BODY>");
    out.println("<H1>Welcome to an Absurdly Simple Chat</H1>");
    out.println();
    out.println("Would you like to communicate via:");
    out.println("<UL>");
    out.println("  <LI><A HREF=\"/chat" + me + "?method=http\">http</A>");
    out.println("  <LI><A HREF=\"/chat" + me + "?method=socket\">socket</A>");
    out.println("  <LI><A HREF=\"/chat" + me + "?method=rmi\">rmi</A>");
    out.println("</UL>");
    out.println("</BODY></HTML>");
  }

  // The applet page displays the chat applet.
  private void printAppletPage(HttpServletRequest req,
                              HttpServletResponse res)
                    throws IOException {
    PrintWriter out = res.getWriter();

    out.println("<HTML>");
    out.println("<HEAD><TITLE>An Absurdly Simple Chat</TITLE></HEAD>");
    out.println("<BODY>");
    out.println("<H1>An Absurdly Simple Chat</H1>");

    String method = req.getParameter("method");
    String user = req.getRemoteUser();
    String applet = null;

    if ("http".equals(method)) {
      applet = "HttpChatApplet";
    }
    else if ("socket".equals(method)) {
      applet = "SocketChatApplet";
    }
    else if ("rmi".equals(method)) {
      applet = "RMIChatApplet";
    }
    else {
      // No method given, or an invalid method given.
      // Explain to the user what we expect.
      out.println("Sorry, this servlet requires a <TT>method</TT> " +
                  "parameter with one of these values: " +
                  "http, socket, rmi");
      return;
    }

    // Print the HTML code to generate the applet.
    // Choose the applet code based on the method parameter.
    // Provide a user parameter if we know the remote user.
    out.println("<APPLET CODE=" + applet + " CODEBASE=/chat/ " +
                "WIDTH=500 HEIGHT=170>");
    if (user != null)
      out.println("<PARAM NAME=user VALUE=\"" + user + "\">");
    out.println("</APPLET>");

    out.println("</BODY></HTML>");
  }
}

Jeg har rettet det samme i *ChatApplet f.eks. HttpChatApplet:

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

import com.oreilly.servlet.HttpMessage;

public class HttpChatApplet extends Applet implements Runnable {

  TextArea text;
  Label label;
  TextField input;
  Thread thread;
  String user;

  public void init() {
    // Check if this applet was loaded directly from the filesystem.
    // If so, explain to the user that this applet needs to be loaded
    // from a server in order to communicate with that server's servlets.
    URL codebase = getCodeBase();
    if (!"http".equals(codebase.getProtocol())) {
      System.out.println();
      System.out.println("*** Whoops! ***");
      System.out.println("This applet must be loaded from a web server.");
      System.out.println("Please try again, this time fetching the HTML");
      System.out.println("file containing this servlet as");
      System.out.println("\"http://server:port/file.html\".");
      System.out.println();
      System.exit(1);  // Works only from appletviewer
                      // Browsers throw an exception and muddle on
    }

    // Get this user's name from an applet parameter set by the servlet
    // We could just ask the user, but this demonstrates a
    // form of servlet->applet communication.
    user = getParameter("user");
    if (user == null) user = "anonymous";

    // Set up the user interface...
    // On top, a large TextArea showing what everyone's saying.
    // Underneath, a labeled TextField to accept this user's input.
    text = new TextArea();
    text.setEditable(false);
    label = new Label("Say something: ");
    input = new TextField();
    input.setEditable(true);

    setLayout(new BorderLayout());
    Panel panel = new Panel();
    panel.setLayout(new BorderLayout());

    add("Center", text);
    add("South", panel);

    panel.add("West", label);
    panel.add("Center", input);
  }

  public void start() {
    thread = new Thread(this);
    thread.start();
  }

  String getNextMessage() {
    String nextMessage = null;
    while (nextMessage == null) {
      try {
        URL url = new URL(getCodeBase(), "/chat/ChatServlet");
        HttpMessage msg = new HttpMessage(url);
        InputStream in = msg.sendGetMessage();
        DataInputStream data = new DataInputStream(
                              new BufferedInputStream(in));
        nextMessage = data.readLine();
      }
      catch (SocketException e) {
        // Can't connect to host, report it and wait before trying again
        System.out.println("Can't connect to host: " + e.getMessage());
        try { Thread.sleep(5000); } catch (InterruptedException ignored) { }
      }
      catch (FileNotFoundException e) {
        // Servlet doesn't exist, report it and wait before trying again
        System.out.println("Resource not found: " + e.getMessage());
        try { Thread.sleep(5000); } catch (InterruptedException ignored) { }
      }
      catch (Exception e) {
        // Some other problem, report it and wait before trying again
        System.out.println("General exception: " +
          e.getClass().getName() + ": " + e.getMessage());
        try { Thread.sleep(1000); } catch (InterruptedException ignored) { }
      }
    }
    return nextMessage + "\n";
  }

  public void run() {
    while (true) {
      text.appendText(getNextMessage());
    }
  }

  public void stop() {
    thread.stop();
    thread = null;
  }

  void broadcastMessage(String message) {
    message = user + ": " + message;  // Pre-pend the speaker's name
    try {
      URL url = new URL(getCodeBase(), "/chat/ChatServlet");
      HttpMessage msg = new HttpMessage(url);
      Properties props = new Properties();
      props.put("message", message);
      msg.sendPostMessage(props);
    }
    catch (SocketException e) {
      // Can't connect to host, report it and abandon the broadcast
      System.out.println("Can't connect to host: " + e.getMessage());
    }
    catch (FileNotFoundException e) {
      // Servlet doesn't exist, report it and abandon the broadcast
      System.out.println("Resource not found: " + e.getMessage());
    }
    catch (Exception e) {
      // Some other problem, report it and abandon the broadcast
      System.out.println("General exception: " +
        e.getClass().getName() + ": " + e.getMessage());
    }
  }

  public boolean handleEvent(Event event) {
    switch (event.id) {
      case Event.ACTION_EVENT:
        if (event.target == input) {
          broadcastMessage(input.getText());
          input.setText("");
          return true;
        }
    }
    return false;
  }
}

Og det var kun lige det jeg kunne huske !

:-)
Avatar billede topydopy Nybegynder
28. januar 2003 - 22:15 #45
Hold da fest!
Du overrasker mig gang på gang.

Jeg har lige hentet det fra din server og afprøver det lige, vender snarest tilbage.
Avatar billede topydopy Nybegynder
28. januar 2003 - 23:05 #46
Det virker PERFEKT!
Mange gang tak selvom det er et fattigt ord. Skal jeg oprette et nyt spørgsmål eller kan jeg give overføre point direkte?
Avatar billede arne_v Ekspert
28. januar 2003 - 23:06 #47
Jeg tror, at du skal oprette et nyt spørgsmål med titel "point til arne_v"
og et link til dette spørgsmål.
Avatar billede topydopy Nybegynder
28. januar 2003 - 23:14 #48
Det være sig hermed gjort:http://www.eksperten.dk/spm/310816
Avatar billede topydopy Nybegynder
28. januar 2003 - 23:53 #49
nu forsøger jeg så at få det til at køre på mycgiserver.com, der understøtter servlets 2.3. Jeg har lavet samme bibliotek struktur som i mit tomcat root bib. Jeg har desuden erstattet web.xml med din.
Jeg har lavet en html side, hvor jeg indsætter appletten.
Min adresse på mycgi er http://www.mycgiserver.com/~callmeal og min html side ser sådan ud:

<html>
<head>
</head>
<body>
<applet
  codebase = "http://www.mycgiserver.com/~callmeal"
  code    = "/classes/ChatDispatch.class"
  archieve = "chat.war"

  width    = "400"
  height  = "300"
  hspace  = "0"
  vspace  = "0"
  align    = "middle"
>
</applet>
</body>
</html>

Jeg kan ikke få det til at virke, men det er ikke noget nyt.
Hvis du stadig vil hjælpe, er du velkommen til at smide din email, så sender jeg password/brugernavn til siden.
Avatar billede arne_v Ekspert
29. januar 2003 - 07:14 #50
Jeg kigger på det i aften.
Avatar billede topydopy Nybegynder
29. januar 2003 - 23:35 #51
Kan du heller ik få det til at køre?
Avatar billede arne_v Ekspert
30. januar 2003 - 07:59 #52
Jeg fik ikke kigget på det i aftes.

Men jeg har kiget på det her til morgen.

Og jeg kan slet ikke komme nogen vegne.

Mest fordi jeg mangler en masse information. Er det Resin eller Tomcat ?
Lytter den på port 80 eller 8080 ? Hvordan skal URL'erne se ud for at få
fat på brugernes web apps ?
Avatar billede arne_v Ekspert
30. januar 2003 - 08:00 #53
Irrelevant for problem-stillingen, men det var da sjovt at se,
at mycgiserver kører Tru64 på Alpha !

[jeg kender lidt til Tru64 og Alpha]
Avatar billede topydopy Nybegynder
30. januar 2003 - 11:04 #54
Hvis du har lyst er du meget velkommen til at sende din mail til topydopy@hotmail.com, så sender jeg dig password.
På denne måde kan du nemmere meget nemmere få svar på spørgsmålene, da der ligger en bruger-beskyttet supportside med en del oplysninger.

I øvrigt har jeg selv engang skulle skrive en simpel kerne til en Alpha.
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

Capgemini Danmark A/S

Finance Lead (SAP)

Netcompany A/S

Test Consultant

Csis Security Group A/S

Sales Executive

Unik System Design A/S

DevOps Engineer