Avatar billede bumle90 Nybegynder
21. april 2002 - 17:06 Der er 4 kommentarer og
1 løsning

appletter og sockets

Hej. Jeg er i gang med at lave en chat i en applet. Men det går ikke så godt, for når jeg prøver at få min applet til at connecte til min server så crasher appletten. Jeg forstår det ganske enkelt ikke. Det virker fint nok hvis jeg kører chatten i en JFrame, men i en applet eller JApplet vil den bare ikke. Her følger koden :

************************************************
class : chatframe  -clienten-
************************************************

import javax.swing.*;
import java.awt.*;
import java.net.*;
import java.io.*;
import java.applet.Applet;
public class chatframe extends Applet
{
private String ip="192.168.1.2";
private int port=7777;
private DataInputStream in;
private DataOutputStream out;
private Socket stub;
private TextField inputField;
   
    public void init()
    {
    setLayout(new BorderLayout());
    inputHandler actionHandler=new inputHandler(this);
   
   
    TextArea outputArea=new TextArea(10,30);
    outputArea.setEnabled(false);

    inputField=new TextField(70);
    inputField.addKeyListener(actionHandler);
   
    Button send=new Button("Send");
    send.addActionListener(actionHandler);

    Panel write=new Panel();
    write.add(inputField);
    write.add(send);
    add(outputArea,BorderLayout.CENTER);
    add(write,BorderLayout.SOUTH);
    inputField.requestFocus();

inputField.setText(""+getCodeBase().getHost());

        try
        {
        stub=new Socket(ip,port);
        in=new DataInputStream(stub.getInputStream());
        out=new DataOutputStream(stub.getOutputStream());
            while (true)
            {
            outputArea.append("\n"+stub.getLocalAddress()+" says \n"+in.readUTF());
            }
        }
        catch (IOException e)
        {
        outputArea.setText("con crashed");
        }

    }

    public String getInput()
    {
    return(inputField.getText());
    }
   
    public void sendchatMsg(String msg)
    {
        try
        {
        out.writeUTF(msg);
        inputField.setText("");
        }
        catch (IOException e)
        {
        e.printStackTrace();
        }
    }

}

************************************************
class : chatServer  -Serveren-
************************************************

import java.net.*;
import java.io.*;
import java.util.Vector;
public class chatServer
{
private int port=7777;
static Vector connections=new Vector();

    public chatServer()
    {
        try
        {

        ServerSocket serverStub=new ServerSocket(port);
                while (true)
                {
                new chatHandler(serverStub.accept());
                }
       
        } catch (IOException e)
        {
        System.out.print(e.toString());
        }
    }

    public synchronized static void broadcast(String msg)
    {
    java.util.Enumeration enum=connections.elements();
        while (enum.hasMoreElements())
        {
            try
            {
            chatHandler hand=(chatHandler)enum.nextElement();
            hand.out.writeUTF(msg);
            } catch (IOException e)
            {
            }
        }
    }
   
    public static void main(String[]argz)
    {
    new chatServer();
    }
}

************************************************
class : inputHandler  -inputhandler-
************************************************

import java.awt.*;
import java.awt.event.*;
public class inputHandler extends WindowAdapter implements ActionListener,KeyListener
{
chatframe target;   
   
    public inputHandler(chatframe Target)
    {
    target=Target;
    }
   
    public void actionPerformed(ActionEvent e)
    {
        if (e.getActionCommand()=="Send")
        {
        target.sendchatMsg(target.getInput());
        }
    }

    public void windowClosing(WindowEvent e)
    {
    System.exit(0);
    }

    public void keyTyped(KeyEvent e)
    {
    }

    public void keyPressed(KeyEvent e)
    {
        if (e.getKeyCode()==10)
        {
        target.sendchatMsg(target.getInput());
        }
    }
    public void keyReleased(KeyEvent e)
    {
    }


}

************************************************
class : chatHandler  -chathandler-
************************************************

import java.net.*;
import java.io.*;
public class chatHandler extends Thread
{

private Socket Stub;
private DataInputStream in;
DataOutputStream out;

    public chatHandler(Socket stub)
    {
    Stub=stub;
        try
        {
        in=new DataInputStream(stub.getInputStream());
        out=new DataOutputStream(stub.getOutputStream());
        }
        catch (IOException e)
        {
        System.out.print(e.toString());
        }   
    chatServer.connections.addElement(this);
    start();
    }

    public void run()
    {
        try
        {
            while (true)
            {
            chatServer.broadcast(in.readUTF());
            }           
        }
        catch (IOException e)
        {
        System.out.print(e.toString());
        }
    }

   
}
Avatar billede disky Nybegynder
21. april 2002 - 17:11 #1
du beder problemmer med denne her i serveren:

                while (true)
                {
                new chatHandler(serverStub.accept());
                }

Hvis der er nogen der connecter til serveren, instantierer den chatHandler's på livet løs indtil du løber tør for resourcer og crasher.

p.s. med alle de while(true) du har, hvordan vil du nogen sinde på en pæn måde stoppe dine programmer på ?
Avatar billede lyhr007 Nybegynder
21. april 2002 - 17:50 #2
med exceptions :)
Avatar billede bumle90 Nybegynder
21. april 2002 - 18:35 #3
nej det er ikke der problemet ligger disky.
Programmet virker fint i en JFrame hvor jeg også har while(true) med.
Mht. atr stoppe det...så kommer det senere...nu skal jeg i første omgang bare have det til at virke :)
Avatar billede bumle90 Nybegynder
21. april 2002 - 18:35 #4
men siger den applet crashed fordi den ikke får forbindelse med serveren eller hvad ?
Avatar billede bumle90 Nybegynder
22. april 2002 - 16:47 #5
desuden så vil den jo ikke instantiere chatHandler's på livet løs indtil jeg løber tør for resourcer og crasher....den laver jo kun en...og derefter venter den på en ny i server.accept :)
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