java实现基于UDP的聊天

服务端:

package UDP;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketAddress;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextArea;
import javax.swing.JTextField;

public class Service extends JFrame implements Runnable, ActionListener {
private SocketAddress clientip = null;
private DatagramSocket DS;
private int Port = 9999;
private JTextArea area = new JTextArea("正在等待对话请求...\n"); // 消息框
private JTextField field = new JTextField(); // 输入框
private JButton JB = new JButton("发送"); // 按钮

public Service() {
this.setTitle("UDP聊天服务端");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JB.addActionListener(this);
this.add(area, BorderLayout.NORTH);
area.setPreferredSize(new Dimension(300, 260));
this.add(field, BorderLayout.CENTER);
this.add(JB, BorderLayout.SOUTH);
this.setSize(500, 350);
this.setLocation(300, 200);
this.setVisible(true);
try {
DS = new DatagramSocket(Port);
new Thread(this).start();
} catch (Exception ex) {
ex.printStackTrace();
}
}

public void run() {
try {
while (true) {
byte[] data = new byte[255];
DatagramPacket DP = new DatagramPacket(data, data.length);
DS.receive(DP);
clientip = DP.getSocketAddress();
String str = new String(DP.getData(), 0, DP.getLength());
area.append(str + '\n');
}
} catch (Exception ex) {
}
}

public void actionPerformed(ActionEvent e) {
// 按钮监听
try {
String str = "服务端:" + field.getText();
byte[] dd = str.getBytes();
DatagramPacket Data = new DatagramPacket(dd, dd.length, clientip);
DS.send(Data);
area.append("我:" + field.getText() + "\n");
field.setText(null);
} catch (Exception ex) {
}
}

public static void main(String[] args) {
new Service();
}
}

客户端:

package UDP;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextArea;
import javax.swing.JTextField;

public class Client extends JFrame implements Runnable, ActionListener {
private JButton JB = new JButton("发送");
private JTextField field = new JTextField();
private JTextArea area = new JTextArea("连接成功,请说话...\n");
private int Port = 9999;
private DatagramSocket DS;

public Client() {
this.setTitle("UDP聊天客户端");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.add(area, BorderLayout.NORTH);
JB.addActionListener(this);
area.setPreferredSize(new Dimension(300, 260));
this.add(field, BorderLayout.CENTER);
this.add(JB, BorderLayout.SOUTH);
this.setSize(500, 350);
this.setLocation(700, 200);
this.setVisible(true);
try {
DS = new DatagramSocket();
InetAddress address = InetAddress.getByName("Localhost");
DS.connect(address, Port);
String str = "客户连接";
byte[] data = str.getBytes();
DatagramPacket DP = new DatagramPacket(data, data.length);
DS.send(DP);
new Thread(this).start();
} catch (Exception e) {
}
}

public void run() {
try {
while (true) {
byte[] data = new byte[255];
DatagramPacket DP = new DatagramPacket(data, data.length);
DS.receive(DP);
String str = new String(DP.getData());
area.append(str + '\n');
}
} catch (Exception ex) {
}
}

public void actionPerformed(ActionEvent e) {
// 按钮监听
try {
String str = "客户端:" + field.getText();
byte[] dd = str.getBytes();
DatagramPacket Data = new DatagramPacket(dd, dd.length);
DS.send(Data);
area.append("我:" + field.getText() + "\n");
field.setText(null);
} catch (Exception ex) {

}
}

public static void main(String[] args) {
new Client();
}
}

posted @ 2020-12-11 13:54  北漠_风  阅读(195)  评论(0)    收藏  举报