这篇文章给大家分享的是有关基于UDP协议实现聊天系统的方法的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
代码展示
下面展示一些 Client类。
class Client extends Thread{ private static String content; //发送内容 private static int port; //发送端口 private static int target; //目标端口 private static byte[] addr; //目标ip地址 public Client(String content,int port,int target,byte[] addr){ this.content=content; this.port=port; this.target=target; this.addr=addr; } public void run(){ DatagramSocket client= null; try { //定义发送端端口为 port 的DatagramSocket对象 client = new DatagramSocket(port); } catch (SocketException e) { e.printStackTrace(); } String str=content; DatagramPacket packet= null; try { //定义DatagramPacket对象,用于封装发送的数据以及目标地址 target packet = new DatagramPacket(str.getBytes(),str.getBytes().length, InetAddress.getByAddress(addr),target); } catch (UnknownHostException e) { e.printStackTrace(); } try { //发送数据 client.send(packet); } catch (IOException e) { e.printStackTrace(); } //关闭释放资源 client.close(); }} class Server extends Thread{ private static JTextArea jt; //对话框 private static int target; //目标端口 public Server(JTextArea jt,int target){ this.jt=jt; this.target=target; }
下面展示一些 Server类。
class Server extends Thread{ private static JTextArea jt; //对话框 private static int target; //目标端口 public Server(JTextArea jt,int target){ this.jt=jt; this.target=target; } public void run(){ String str; DatagramSocket server= null; try { //定义一个端口号为 target 的接收端DatagramSocket对象 server = new DatagramSocket(target); } catch (SocketException e) { e.printStackTrace(); } byte[] buf=new byte[1024]; //定义一个DatagramPacket数据报对象,用于封装接收数据 DatagramPacket packet=new DatagramPacket(buf, buf.length); while (true){ try { //等待接收数据,在数据没有被接收到之前会被堵塞 server.receive(packet); } catch (IOException e) { e.printStackTrace(); } //使用DatagramPacket的方法获得接收到的信息,并转为字符串类型 str=new String(packet.getData(), 0,packet.getLength()); //将接收到的信息打印到对话框 jt.append("接收到:"+str+"\n"); } }}
下面展示一些 Main类。
public class Main { public static int port; public static int target; public static byte[] addr; public static void Login(){ System.out.print("请输入端口号:"); Scanner ScPort=new Scanner(System.in); port=ScPort.nextInt(); System.out.print("请输入目标端口号1:"); Scanner ScTarget=new Scanner(System.in); target=ScTarget.nextInt(); System.out.print("请输入目标端口号2:"); Scanner ScTarget2=new Scanner(System.in); int target2=ScTarget2.nextInt(); System.out.print("请输入目标IP地址:"); Scanner Scaddr=new Scanner(System.in); String ip=Scaddr.nextLine(); String[] ii=ip.split("\\."); byte[] addr=new byte[4]; for(int i=0;i<4;i++){ addr[i]=(byte)(Integer.parseInt(ii[i])); } System.out.println("窗口启动中...."); new Thread(new Server(CreateAndShowGUI(port,target,addr),target2),"接收服务").start(); } public static JTextArea CreateAndShowGUI(int port,int target,byte[] addr){ JFrame jf=new JFrame("聊天界面"); jf.setLocation(400,200); jf.setSize(400,300); jf.setLayout(new BorderLayout()); jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JTextArea jt=new JTextArea(14,34); JScrollPane scrollPane=new JScrollPane(jt); jt.setEditable(false); JTextField jte=new JTextField(20); JButton jb=new JButton("发送"); jb.addActionListener(e->{ String content=jte.getText(); if (content!=null&&!content.trim().equals("")){ jt.append("输入信息为:"+content+"\n"); try { new Thread(new Client(content,port,target,addr),"发送服务").start(); } catch (Exception exception) { exception.printStackTrace(); } }else{ jt.append("你输入的内容为空"); } jte.setText(""); //信息发送后,将发送框重置 }); JPanel jp=new JPanel(); JLabel jl=new JLabel("聊天信息"); jp.add(jl); jp.add(jte); jp.add(jb); jf.add(jt,BorderLayout.PAGE_START); jf.add(jp,BorderLayout.PAGE_END); //显示GUI界面 jf.setVisible(true); return jt; } public static void main(String[] args) throws Exception{ Login(); }}
运行截图
登录界面(一)
登录界面(二)
聊天界面(一)
聊天界面(二)
感谢各位的阅读!关于“基于UDP协议实现聊天系统的方法”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!