java带图形用户的聊天_java:带有图形化界面,可以发送和接收的聊天工具

这是一个使用Java实现的UDP聊天程序,具备图形用户界面,用户可以发送和接收消息。程序通过创建DatagramSocket进行数据的发送和接收,并在文本框中实时更新聊天记录。当按下发送按钮或在文本框中按下回车键时,信息会被发送到指定IP地址的4008端口,并在同一界面上显示收到的消息。
摘要由CSDN通过智能技术生成

/**

根据UDP协议,设计一个聊天程序,可以发送和接收,并有相应的图形化界面

*/

import java.net.*;

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

}

}

 
 

0818b9ca8b590ca3270a3433284dd417.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值