import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.net.*;
import java.io.*;
public class Chat extends JFrame {
/**
* 一个简单的基于UDP的聊天程序
*/
private static final long serialVersionUID = 1L;
//private JPanel panel;
private List lst = new List(6);
private JTextField tfIP = new JTextField(10);
private JTextField tfData = new JTextField(20);
private DatagramSocket ds = null;
private JLabel j1 = new JLabel("IP地址:");
private JLabel j2 = new JLabel("想说的话:");
public Chat() {
//super("Chat");
this.add(lst,"Center");
JPanel panel = new JPanel();
panel.setLayout(new GridLayout(1,4));
panel.add(j1);
panel.add(tfIP);
panel.add(j2);
panel.add(tfData);
this.add(panel,"South");
try {
ds = new DatagramSocket(1234);
} catch (SocketException e1) {
e1.printStackTrace();
}
tfData.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
try{
byte[] buf = tfData.getText().getBytes();
DatagramPacket p = new DatagramPacket(buf,buf.length,InetAddress.getByName(tfIP.getText().trim()),1234);
ds.send(p); //发送消息
lst.add("localhost to "+tfIP.getText()+" : "+tfData.getText(),0);
}catch(Exception ex){
ex.printStackTrace();
}
tfData.setText("");
}
});
new Thread(new Runnable(){
public void run() {
byte[] buf = new byte[1024];
DatagramPacket p = new DatagramPacket(buf,1024);
while(true)
try {
ds.receive(p);
String s = new String(p.getData(),0,p.getLength());
lst.add(p.getAddress().getHostAddress()+" to localhost : "+s,0);
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
this.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
}
public static void main(String[] args){
Chat c = new Chat();
c.setSize(300,400);
c.setVisible(true);
}
}
[ 本帖最后由 大饼先生 于 2006-8-18 15:27 编辑 ]