UDP编程制作对话机器人

UDP对象

  • 服务器端:一经启动就会对外提供服务;不知道客户端什么时候发送请求;它是被动接收的一方
    【就相当于饭店,一开始营业,就要时刻准备为顾客服务】
  • 客户端:在需要的时候才发起连接;它是主动发送请求的一方
    【相当于顾客,什么时候饿了,就回去饭店点餐吃】

UDP编程

服务器端

  1. 启动一个UDP服务器端(IP、端口号)
    端口号是需要自己手动设置的(1024一前的端口号被称为知名端口号,都是被占用的,我们自己定义的端口号从9000开始往后起)
    IP地址我们是不需要管的,会默认是本机的IP地址

  2. 服务器等待客户端的链接用receive方法,这时候必须要有一个包裹DatagramPacket
    需要有参数 【传递数据的载体数组,以及包裹的大小】

  3. 接收到客户端的信息,然后进行打印

  4. 给客户端响应,用send方法发送消息(同样需要初始化一个包裹)
    不同的是,这里需要四个参数【发送内容的转换成载体数组,包裹大小,客户端ip地址,客户端端口号】

package udp;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;

/**
 * Created with IntelliJ IDEA.
 * Description:UDP 服务器端
 * User: starry
 * Date: 2021 -04 -13
 * Time: 20:53
 */
public class UDPServer {

    //端口号
    private static final int port = 9001;

    //数据的最大值
    private static final int bleng = 1024;

    public static void main(String[] args) throws IOException {
        //1.启动一个UDP服务器端(IP、端口号)
        DatagramSocket socket = new DatagramSocket(port);
        System.out.println("服务器已经启动!");
        while(true) {
            //2.初始化数据包
            DatagramPacket clientPacket = new DatagramPacket(
                    new byte[bleng],
                    bleng
            );
            //3.等待客户端的链接
            socket.receive(clientPacket);
            // 执行到此步骤,表示已经有客户端连接
            //4.接收到客户端的信息
            String msg = new String(clientPacket.getData());
            System.out.println("接收到客户端的信息:"+msg);
            //给客户端一个响应
            String serMsg = msg.replace("吗?","。");
            //发送消息
            DatagramPacket serPacket = new DatagramPacket(
                    serMsg.getBytes(),
                    serMsg.getBytes().length,   //注意是字节长度
                    clientPacket.getAddress(),  //ip地址
                    clientPacket.getPort()      //端口号
            );
            socket.send(serPacket);
        }
    }

}


客户端

  1. 启动客户端
    这里不设置端口号,默认就是由系统自动分配一个端口号,动态端口号

  2. 输入一个消息,并发送给服务器端,需要用到send方法,此时也需要包裹
    参数为【发送内容的转换成载体数组,包裹大小,服务器端ip地址,服务器端端口号】

  3. 接收服务器的返回信息,用receive方法来接收,同样需要一个包裹
    参数为【传递数据的载体数组,以及包裹的大小】

  4. 打印接收到的消息

package udp;

import java.io.IOException;
import java.net.*;
import java.util.Scanner;

/**
 * Created with IntelliJ IDEA.
 * Description:客户端
 * User: starry
 * Date: 2021 -04 -13
 * Time: 21:07
 */

public class UDPClient {

    //服务器的ip地址
    private static final String ip = "127.0.0.1";
    //服务器的端口号
    private static final int port = 9001;
    //数据的最大值
    private static final int bleng = 1024;

    public static void main(String[] args) throws IOException {
        //1.启动客户端
        DatagramSocket client = new DatagramSocket();
        Scanner scanner = new Scanner(System.in);
        while(true) {
            System.out.println("我:");
            String msg = scanner.nextLine();
            //2.给服务器发送消息
            DatagramPacket datagramPacket = new DatagramPacket(
                    msg.getBytes(),
                    msg.getBytes().length,
                    InetAddress.getByName(ip),
                    port
            );
            client.send(datagramPacket);
            //3.接收服务器的返回信息
            DatagramPacket serPacket = new DatagramPacket(
                    new byte[bleng],
                    bleng
            );
            client.receive(serPacket);
            //接收到服务器端返回信息
            String serMsg = new String(serPacket.getData());
            System.out.println("对方:"+serMsg);
        }
    }

}

UDP服务端发布

  1. 打开project structure
    在这里插入图片描述

  2. 选择从当前项目打包
    在这里插入图片描述

  3. 选择启动类
    在这里插入图片描述

  4. 选择我的服务器端
    在这里插入图片描述

  5. 复制该路径,然后ok,再ok。
    在这里插入图片描述

  6. 打包项目
    在这里插入图片描述

  7. build
    在这里插入图片描述

  8. 如果刚才的路径没复制上,project structure也有
    在这里插入图片描述

  9. 把jar包用Xftp7工具上传到云服务器
    在这里插入图片描述

  10. 打开Xshell 工具 用命令启动这个jar包
    在这里插入图片描述

  11. 把自己本地代码客户端的ip改成云服务器ip

private static final String ip = "82.156.229.239";

小机器人对话

此时启动我本地的客户端,就会回答我说的化
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值