小弟刚学完java基础,练练手就做了一个特别简单的聊天程序,源代码如下:
import java.net.*;
import java.awt.*;
import java.awt.event.*;
public class Receive {
Frame f=new Frame("聊天室");
TextField tfIP=new TextField(15);
TextArea lst=new TextArea();
Label lb=new Label("IP");
DatagramSocket ds;
TextField tfData=new TextField(20);
Button bt=new Button("send");
Button bt2=new Button("Content can't for empty");//定义模态显示
Dialog dlg=new Dialog(f,"消息提示",true);
public static void main(String args[]){
new Receive();//调用构造函数初始化
}
public Receive(){
try{
ds=new DatagramSocket(8087);
}catch(Exception ex){
ex.printStackTrace();
}
//设置线程监听对方发送的内容
new Thread(new Runnable(){
public void run(){
byte buf[]=new byte[1024];
DatagramPacket dp=new DatagramPacket(buf,1024);
while(true){
try{
ds.receive(dp);
lst.append("对方(来自"+dp.getAddress().getHostAddress()+",接口:"+dp.getPort()+") "+"当前时间:"+"\n"+new String(buf,0,dp.getLength())+"\n");
}catch(Exception e){
e.printStackTrace();
}
}
}
}).start();
init1();
}
public void init1(){
f.setSize(400,400);//设置容器的大小
f.add(lst);
//添加组件,布置布局
Panel p1=new Panel();
Panel p2=new Panel();
Panel p3=new Panel();
p1.setLayout(new BorderLayout());
p2.setLayout(new BorderLayout());
p3.setLayout(new BorderLayout());
p1.add("West",lb);
p1.add("East",tfIP);
p2.add("West",bt);
p2.add("East",tfData);
p3.add("West",p1);
p3.add("East",p2);
f.add("South",p3);
dlg.setLayout(new FlowLayout());
dlg.add(bt2);
dlg.setBounds(0, 0, 200, 150);//设置提示框的大小
f.setVisible(true);//让容器可显示
f.setResizable(false);//不可改变容器大小
//关闭窗口事件
f.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
ds.close();
f.setVisible(false);
f.dispose();
System.exit(0);
}
});
//触发按钮事件
bt.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent ex){
byte[]buf;
buf=tfData.getText().getBytes();
if(buf.length!=0){
try{
DatagramPacket dp=new DatagramPacket(buf,buf.length,InetAddress.getByName(tfIP.getText()),8088);
ds.send(dp);
tfData.setText("");
lst.append("自己:"+"\n"+new String(buf)+"\n");//new String(dp.getData());
}catch(Exception e){
e.printStackTrace();
}
}else{//设置成为模态显示并其可现
dlg.setModal(true);
dlg.setVisible(true);
}
}
});
//模态显示按钮的触发事件
bt2.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
dlg.dispose();
}
});
//输入文本框的触发事件
tfData.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
byte[]buf;
buf=e.getActionCommand().getBytes();
if(buf.length!=0){
try{
DatagramPacket dp=new DatagramPacket(buf,buf.length,InetAddress.getByName(tfIP.getText()),8088);
ds.send(dp);
((TextField)e.getSource()).setText("");
lst.append("自己:"+"\n"+new String(buf)+"\n");//new String(dp.getData());
}catch(Exception ex){
ex.printStackTrace();
}
}else{
dlg.setModal(true);
dlg.setVisible(true);
}
}
});
}
}
把上面的代码在复制一个,改变一下端口,就可以实现简单的聊天了,但还有一些功能没有实现,还请各位指点一二。
未能实现的功能:双方发送的内容所显示的动态时间;发送框在程序刚开始运行的时候,光标没在发送框;发送按钮不能显示中文,不知道怎么解决这个中文乱码
还请大家帮忙啊!