本机测试效果如下:
p公共类,做为客户端与服务器端的界面
package com.huizhi;
import javax.swing.*;
import java.awt.*;
import java.io.IOException;
public class PublicUi {
JTextArea ja;
JButton jButton;
JTextField jTextField;
public void setUi(String a) throws IOException {
JFrame jFrame=new JFrame();
jFrame.setVisible(true);
jFrame.setTitle(a);
jFrame.setBounds(50,50,400,400);
// jFrame.setResizable(false);
jButton=new JButton("发送消息");
jTextField=new JTextField();
jTextField.setColumns(30);
ja=new JTextArea();
ja.setRows(20);
ja.setColumns(30);
jFrame.setLayout(new FlowLayout());
jFrame.add(jTextField);
jFrame.add(jButton);
jFrame.add(ja);
}
}
客户端代码
package com.huizhi;
import javax.swing.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
public class ClientUDP extends PublicUi{
public String stra;
DatagramSocket socket;
InetAddress address;
DatagramPacket packet2;
public static void main(String[] args) throws Exception {
ClientUDP clientUDP=new ClientUDP();
//clientUDP.setUi();
clientUDP.sendOrReceive("客户端");
}
public void sendOrReceive(String a) throws Exception{
setUi(a);
setListen2(jButton);
//建立套接字接口
//socket = new DatagramSocket();
socket = new DatagramSocket(8081);
address = InetAddress.getByName("localhost");
//实例化Scanner类
//String line=this.stra;
//BufferedReader br = new BufferedReader(new InputStreamReader(clientUi.sta));
/*接收的数据包*/
byte[] msgByte = new byte[1024];
// 接收消息的数据报包
packet2 = new DatagramPacket(msgByte, msgByte.length);
while(true){
//发送的数据报包
//System.out.println(this.stra);
socket.receive(packet2);
String msg = new String(packet2.getData(),0,packet2.getLength());
System.out.println("窗口A收到信息:"+msg);
ja.append(msg+"\r\n");
}
}
public void setListen2(JButton jButton){
jButton.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
// super.mouseClicked(e);
stra =jTextField.getText();
System.out.println(stra);
/*JOptionPane.showMessageDialog();*/
if(stra!=null){
DatagramPacket datagramPacket = new DatagramPacket(stra.getBytes(),stra.getBytes().length,address,8080);
try{
socket.send(datagramPacket);
}
catch (IOException e1){
e1.printStackTrace();
}
}
}
});
}
}
服务器端代码
/*
实现窗口聊天
*/
package com.huizhi;
import javax.swing.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
public class ServerUDP extends PublicUi {
private DatagramPacket packet;
private String stra;
public static void main(String[] args) throws Exception {
ServerUDP serverUDP=new ServerUDP();
serverUDP.sendOrReceive();
}
public void sendOrReceive() throws Exception{
setUi("服务器端");
@SuppressWarnings("resource")
DatagramSocket datagramSocket = new DatagramSocket(8080);//绑定消息接收端口8080
// 用以存放接收数据的字节数组
byte[] msgByte = new byte[1024];
// 接收消息的数据报包
packet = new DatagramPacket(msgByte, msgByte.length);
InetAddress address;
address = InetAddress.getByName("localhost");
/*
* 回传数据*/
/*BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
String line;*/
//Scanner sc = new Scanner(System.in); //实例化Scanner类
setListen(jButton,datagramSocket,address);
while(true){
datagramSocket.receive(packet);
String msg = new String(packet.getData(),0,packet.getLength());
System.out.println("窗口B收到信息:"+msg);
ja.append(msg+"\r\n");
/*
回传数据去客户端
*/
/*if((line = br.readLine())!=null){
DatagramPacket datagramPacket = new DatagramPacket(line.getBytes(),line.getBytes().length,packet.getAddress(),packet.getPort());
datagramSocket.send(datagramPacket);
}*/
}
}
public void setListen(JButton jButton,DatagramSocket socket,InetAddress address){
jButton.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
// super.mouseClicked(e);
stra =jTextField.getText();
System.out.println(stra);
/*JOptionPane.showMessageDialog();*/
if(stra!=null){
DatagramPacket datagramPacket = new DatagramPacket(stra.getBytes(),stra.getBytes().length,address,8081);
try{
socket.send(datagramPacket);
}
catch (IOException e1){
e1.printStackTrace();
}
}
}
});
}
}