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());
}
}
}
