Java聊天---CS---UDP通信

简单实现 服务器与客户端的聊天 使用 UDP通信

写这篇的原因之一是为了与之前的TCP通信进行对比。

  • 先了解服务器与客户端交互是如何实现的
  • 代码实现
  • 聊天效果截图

一、先了解UDP协议中 两个主机如何发送数据:

在这里插入图片描述

二、代码实现:

代码只是作为一个记录,具体实现还可以将其进行优化,修改。
个人觉得有思路要比敲代码更重要

  • 发送类:Send.java

    package udp通信;
    
    import java.io.IOException;
    import java.net.DatagramPacket;
    import java.net.DatagramSocket;
    import java.net.InetAddress;
    
    /**
     * 发送端:无返回值,将指定的字节数组发送给指定的主机: IP:PORT
     * 
     * @author 轩xuan
     *
     */
    public class Send {
    	@SuppressWarnings("resource")
    	public void udpsend(byte[] buf, InetAddress address, int port) throws IOException {
    		DatagramPacket datagrampacket = new DatagramPacket(buf, buf.length, address, port);
    		new DatagramSocket().send(datagrampacket);
    	}
    }
    
  • 接收类:Recevie.java

    package udp通信;
    
    import java.io.IOException;
    import java.net.DatagramPacket;
    import java.net.DatagramSocket;
    
    /**
     * 接收端:返回接收的字节数组
     * 
     * @author 轩xuan
     *
     */
    public class Recevie {
    	@SuppressWarnings("resource")
    	public byte[] udprecevie(int port) throws IOException {
    		DatagramSocket datagramsocket = new DatagramSocket(port);// 绑定端口
    		byte[] buf = new byte[1024];
    		datagramsocket.receive(new DatagramPacket(buf, buf.length));
    		datagramsocket.close();
    		return buf;
    	}
    }
    
  • 男朋友:UDPBoy.java

    package udp通信;
    
    import java.io.IOException;
    import java.net.InetAddress;
    import java.util.Scanner;
    
    /**
     * 实现UDP协议:
     * 
     * 男朋友
     * 
     * 本地端口:6666
     * 
     * @author 轩xuan
     *
     */
    public class UDPBoy {
    	public static void main(String[] args) throws IOException {
    		Scanner sc = new Scanner(System.in);
    		boolean flag = true;
    		System.out.println("男方");
    		while (flag) {
    			System.out.print("女朋友:\t");
    			byte[] buf = new Recevie().udprecevie(6666);// 绑定端口,返回接收的字节数组
    			System.out.println(new String(buf, 0, buf.length));
    			System.out.print("\n我:\t");
    			new Send().udpsend(sc.next().getBytes(), InetAddress.getByName("127.0.0.1"), 7777);// 指定发送:数据、对方IP、端口
    			System.out.println("---------------------------------------\n");
    		}
    		sc.close();
    	}
    }
    
  • 女朋友:UDPGirl.java

    package udp通信;
    
    import java.io.IOException;
    import java.net.InetAddress;
    import java.util.Scanner;
    
    /**
     * 假定女生主动了。。。哈哈
     * 
     * 实现UDP协议:
     * 
     * 女朋友 本地端口: 7777
     * 
     * @author 轩xuan
     *
     */
    public class UDPGirl {
    	public static void main(String[] args) throws IOException {
    		Scanner sc = new Scanner(System.in);
    		boolean flag = true;
    		System.out.println("女方");
    		while (flag) {
    			System.out.print("我:\t");
    			new Send().udpsend(sc.next().getBytes(), InetAddress.getByName("127.0.0.1"), 6666);// 指定发送:数据、对方IP、端口
    			System.out.print("\n男朋友:\t");
    			byte[] buf = new Recevie().udprecevie(7777);// 绑定端口,返回接收的字节数组
    			System.out.println(new String(buf, 0, buf.length));
    			System.out.println("---------------------------------------\n");
    		}
    		sc.close();
    	}
    }
    

三、实现截图:

(为了方便查看具体实现功能,使用两个dos窗口,运行)

  • 假定先让女方发送消息。
  • 运行前:先准备好两个控制台:
    在这里插入图片描述
  • 然后运行男朋友类,锁定其中一个控制台,让他显示男方。
  • 接着运行女朋友类。
  • 在女方的控制台先输入。
  • 接着男方回复。
  • 见下图
    在这里插入图片描述

《在绝妙的五月》---海涅
在绝妙的五月
一切花蕾在喷涌
这时我的心头
爱情已萌动

在绝妙的五月
一切鸟儿在欢唱
这是我向她供认了
我的眷恋与渴望

猜你喜欢

转载自blog.csdn.net/qq_44009311/article/details/103059582