基于DatagramSocket的UDP网络编程之两人聊天

程序说明:

发送端(player1)、接收端(player2)
发送端先发送任意内容至接收端,接收端接收内容并发送回复内容至发送端 形成简易聊天模式
最后发送端发送886 接收端回复任意内容 聊天断开(线程结束)
在这里插入图片描述

发送端:

package com.homework.homework0805.editio1;

import java.io.*;
import java.net.*;

/**
 * @Author jinman1012@qq.com   2020/8/5 15:45
 * @Version 1.0
 */
public class DataSender {
    public static void main(String[] args) throws IOException {
        //建立udp的socket对象  DatagramSocket
        DatagramSocket socket = new DatagramSocket(10857);
        //将要发送的数据封装成数据包
        String dataSend;
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        //创建接收数据的数据报包
        byte[] buf = new byte[1024];
        DatagramPacket recPackage = new DatagramPacket(buf, 0, buf.length);
        while ((dataSend = br.readLine()) != null) {
            //send
            sendInfo(socket, dataSend);
            //receiver
            socket.receive(recPackage);
            String str = parseInfo(recPackage);
            //循环终止判断
            if (dataSend.equals("886")) break;
        }
        //对资源进行释放
        socket.close();
    }

    private static void sendInfo(DatagramSocket socket, String dataSend) throws IOException {
        byte[] dataBytes = dataSend.getBytes();
        InetAddress targetIp = InetAddress.getByName("127.0.0.1");
        DatagramPacket sendpacket = new DatagramPacket(dataBytes, 0, dataBytes.length, targetIp, 51857);
        //通过udp的socket对象,将数据包发送出
        socket.send(sendpacket);
    }

    private static String parseInfo(DatagramPacket packet) {
        //对收到的数据进行解析
        byte[] dataByte = packet.getData();
        int offset = packet.getOffset();
        int length = packet.getLength();
        String str = new String(dataByte, offset, length);
        System.out.println("收到来自主机" + packet.getAddress()
                + ":" + packet.getPort() + "的消息:" + str);
        return str;
    }
}

接收端:

package com.homework.homework0805.editio1;

import java.io.*;
import java.net.*;

/**
 * @Author jinman1012@qq.com   2020/8/5 15:45
 * @Version 1.0
 */
public class DataReceiver {
    public static void main(String[] args) throws IOException {
        boolean flag = true;
        //建立udp的socket对象.
        DatagramSocket socket = new DatagramSocket(51857);
        //创建用于接收数据的数据报包,通过socket对象的receive方法接收数据
        byte[] buf = new byte[1024];
        DatagramPacket recpacket = new DatagramPacket(buf, 0, buf.length);
        //send DatagramPacket
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String data;
        //通过数据包对象的功能来完成对接收到数据进行解析.
        while (flag) {
            //receiver
            socket.receive(recpacket);
            String str = parseInfo(recpacket);
            //send
            data = br.readLine();
            sendInfo(socket, data);
            //循环终止判断
            if (str.equals("886")) flag = false;
        }
        //可以对资源进行释放
        socket.close();
    }

    private static String parseInfo(DatagramPacket packet) {
        //对收到的数据进行解析
        byte[] dataByte = packet.getData();
        int offset = packet.getOffset();
        int length = packet.getLength();
        String str = new String(dataByte, offset, length);
        System.out.println("收到来自主机" + packet.getAddress()
                + ":" + packet.getPort() + "的消息:" + str);
        return str;
    }

    private static void sendInfo(DatagramSocket socket, String dataSend) throws IOException {
        byte[] dataBytes = dataSend.getBytes();
        InetAddress targetIp = InetAddress.getByName("127.0.0.1");
        DatagramPacket sendpacket = new DatagramPacket(dataBytes, 0, dataBytes.length, targetIp, 10857);
        //通过udp的socket对象,将数据包发送出
        socket.send(sendpacket);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值