/**
根据UDP协议,设计一个聊天程序,可以发送和接收,并有相应的图形化界面
*/
import .*;
import java.awt.*;
import java.awt.event.*;
//发送信息
class ChatSend implements Runnable
{
private Button but; //发送按钮
private TextArea tain; //输入文本
private TextArea taout; //接收信息,并显示自己的信息
public ChatSend(Button but, TextArea tain, TextArea taout)
{
this.but = but;
this.tain = tain;
this.taout = taout;
}
public void run()
{
//添加按钮监听,发送数据
but.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
try
{
//创建Socket服务
DatagramSocket SendSocket = new DatagramSocket();
//获取输入文本区域里的字符串
String line = tain.getText();
byte[] buf = line.getBytes();
//数据打包,发送
DatagramPacket dp = new DatagramPacket(buf, buf.length, InetAddress.getByName("10.22.72.144"), 4008);
SendSocket.send(dp);
tain.setText("");
taout.append(line +"\r\n");
SendSocket.close();
}
catch(Exception ex)
{
System.out.println(e.toString());
}
}
});
//文本框中输入回车键监听
tain.addKeyListener(new KeyAdapter()
{
public void keyPressed(KeyEvent e)
{
if(e.getKeyCode() == e.VK_ENTER)
{
try
{
//创建Socket服务
DatagramSocket SendSocket = new DatagramSocket();
//获取文本区域里的字符串
String line = tain.getText();
byte[] buf = line.getBytes();
//数据打包发送
DatagramPacket dp = new DatagramPacket(buf, buf.length, InetAddress.getByName("10.22.72.144"), 4008);
SendSocket.send(dp);
tain.setText("");
taout.append(line +"\r\n");
SendSocket.close();
}
catch(Exception ex)
{
System.out.println(e.toString());
}
}
}
});
}
}
//接收信息
class ChatReceive implements Runnable
{
private TextArea taout; //接收信息区域
public ChatReceive(TextArea taout)
{
this.taout = taout;
}
public void run()
{
while(true)
{
try
{
//创建Socket服务
DatagramSocket RecSocket = new DatagramSocket(5009);
//创建数据包,接收数据
byte[] buf = new byte[1024];
DatagramPacket dp = new DatagramPacket(buf, buf.length);
RecSocket.receive(dp);
//获取数据信息
String ip = dp.getAddress().getHostAddress();
String data = new String(dp.getData(), 0, dp.getLength());
//信息添加到文本区域
taout.append(ip +":"+data +"\r\n");
RecSocket.close();
}
catch(Exception ex)
{
System.out.println(ex.toString());
}
}
}
}
class Chat
{
public static void main(String[] args)
{
//设计图形化界面
Frame f = new Frame("我聊");
f.setSize(400, 400);
f.setLocation(300, 250);
f.setLayout(new FlowLayout());
//创建部件
TextArea tain = new TextArea();
TextArea taout = new TextArea();
Button but = new Button("发送");
taout.setColumns(50);
taout.setRows(18);
tain.setColumns(40);
tain.setRows(2);
f.add(taout);
f.add(tain);
f.add(but);
f.setVisible(true);
//窗口关闭监听
f.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
f.setVisible(false);
System.exit(0);
}
});
//创建并启动发送、接收线程
new Thread(new ChatSend(but, tain, taout)).start();
new Thread(new ChatReceive(taout)).start();
}
}
如果觉得《java带图形用户的聊天_java:带有图形化界面 可以发送和接收的聊天工具》对你有帮助,请点赞、收藏,并留下你的观点哦!