如何应用DataGram进行用户-服务器编程(2)

简介:

Java编程艺术》章节选登。作者:高永强 清华大学出版社 (即将出版)

23.2.5  Datagram编程(2

如下为利用 Datagram 编写的用户端程序:

 

// 这个程序存在本书配套资源目录 Ch23 名为 DatagramClientTest.java
import java.io.  * ;
import java.net. * ;
import java.util. * ;
public class DatagramClientTest {
    public static void main(String[] args) {
        try {
            DatagramSocket socket = new DatagramSocket();
                                                // 创建 Datagram 插座
            byte[] buf = new byte[256];         // 创建缓冲
            InetAddress address = InetAddress.getByName("127.0.0.1");                                                   // 利用本地计算机
            sending(socket, buf, buf.length, address, 1688);
                                                // 通过端口 1688 发送空邮包
             String received = receiving(socket, buf, buf.length);
                                                // 接收服务器邮包
            System.out.println(received);       // 打印内容,即慰问和提示
            Scanner sc = new Scanner(System.in);// 创建键盘输入扫描
            while (sc.hasNextLine()) {          // 如果有键盘输入,则继续
                String line = sc.nextLine();    // 得到键入内容
                if (!line.trim().equals("quit")) {// 如果不是停止
                    buf = new byte[256];        // 清除缓冲
                    buf = line.getBytes();      // 将键入内容装入缓冲
                    sending(socket, buf, buf.length, address, 1688);
                                                // 调用发送方法
                    received = receiving(socket, buf, buf.length);
                                                // 接收服务器发来的邮包
                    System.out.println(received);// 打印
                    buf = new byte[256];        // 清除缓冲
                    sending(socket, buf, buf.length, address, 1688);
                                                // 发送空邮包
                    received = receiving(socket, buf, buf.length);
                                                    // 接收邮件长度信息
                    System.out.println(received);   // 打印这个信息
                }
                else break;                         // 中断循环
            }
            socket.close();                         // 关闭
        }
        catch (IOException e) {
            e.printStackTrace();
        }
    }
    // 自定义静态方法发送邮包至服务器
    public static void sending(DatagramSocket socket, byte[] buf, int length,   InetAddress address, int port) {
        DatagramPacket sendPacket = new DatagramPacket(buf, length, address,        port);
        try {
            socket.send(sendPacket);                // 调用发送
        }catch (IOException e) {
            e.printStackTrace();
        }
    }
    // 自定义静态方法接收从服务器发来的邮包
    public static String receiving(DatagramSocket socket, byte[] buf, int   length) {
        DatagramPacket receivePacket = new DatagramPacket(buf, length);
        String received = null;
        try {
            socket.receive(receivePacket);          // 调用接收
            received = new String(receivePacket.getData(), 0,                       receivePacket.getLength());             // 得到信息
        } catch (IOException e) {
            e.printStackTrace();
        }
        return received;
    }
 }

 

可以看到,用户和服务器通过邮包进行通讯和数据传递。当用户需要得到服务器发送过来的信息时,首先发送一个空邮包给服务器,然后服务器利用这个邮包,将数据发还给用户。如果用户需要将发给服务器的信息转换为大写字母时,也首先将这个信息通过邮包发给服务器,经过处理后,服务器利用这个邮包将新内容发还给用户。

    如同上一小节讨论过的远程用户-服务器运行模拟,将这个例子的用户端代码中本地计算机IP地址127.0.0.1修改为作为服务器的远程计算机IP地址,如192.168.15.101,则可进行联网运行。具体步骤可参考上一小节的例子。(续完)














本文转自高永强51CTO博客,原文链接:http://blog.51cto.com/yqgao/157682,如需转载请自行联系原作者


相关文章
|
2月前
|
机器学习/深度学习 数据库 数据安全/隐私保护
服务器核心组件:CPU 与 GPU 的核心区别、应用场景、协同工作
CPU与GPU在服务器中各司其职:CPU擅长处理复杂逻辑,如订单判断、网页请求;GPU专注批量并行计算,如图像处理、深度学习。二者协同工作,能大幅提升服务器效率,满足多样化计算需求。
1324 39
|
1月前
|
存储 机器学习/深度学习 人工智能
硅谷GPU单节点服务器:技术解析与应用全景
“硅谷GPU单节点服务器”代表了在单个物理机箱内集成强大计算能力,特别是GPU加速能力的高性能计算解决方案。它们并非指代某个特定品牌,而是一类为处理密集型工作负载而设计的服务器范式的统称。
|
1月前
|
机器学习/深度学习 人工智能 弹性计算
2025年阿里云GPU服务器租用价格与应用场景详解
阿里云GPU服务器基于ECS架构,集成NVIDIA A10/V100等顶级GPU与自研神龙架构,提供高达1000 TFLOPS混合精度算力。2025年推出万卡级异构算力平台及Aegaeon池化技术,支持AI训练、推理、科学计算与图形渲染,实现性能与成本最优平衡。
|
4月前
|
弹性计算 关系型数据库 数据库
阿里云服务器ECS是什么?ECS应用场景、租用流程及使用教程整理
阿里云ECS(弹性计算服务)是性能稳定、弹性扩展的云计算服务,支持多种处理器架构和实例类型,适用于网站托管、开发测试、数据存储、企业服务、游戏多媒体及微服务架构等场景。提供从注册、配置到部署、运维的完整使用流程,助力用户高效上云。
|
3月前
|
域名解析 运维 监控
阿里云轻量服务器的系统镜像和应用镜像的区别
轻量应用服务器是阿里云推出的易用型云服务器,支持一键部署、域名解析、安全管理和运维监控。本文介绍其系统镜像与应用镜像的区别及选择建议,助您根据业务需求和技术能力快速决策,实现高效部署。
|
3月前
|
存储 弹性计算 运维
阿里云服务器全解析:ECS是什么、应用场景、租用流程及优缺点分析
阿里云ECS(Elastic Compute Service)是阿里云提供的高性能、高可用的云计算服务,支持弹性扩展、多样化实例类型和多种计费模式。适用于网站搭建、数据处理、运维测试等多种场景,具备分钟级交付、安全可靠、成本低、易运维等优势,是企业及开发者上云的理想选择。
636 5
|
3月前
|
运维 监控 Kubernetes
Bitnami 替代品:Websoft9 如何接力单服务器多应用时代
Bitnami 曾为开源应用部署带来革命性体验,但随着 Docker 成熟与战略转向云原生,其单机多应用支持逐渐弱化。面对多应用管理分散、资源冲突、运维工具缺失等痛点,Websoft9 应运而生,提供一键部署、统一管理、智能调度等能力,全面优化单服务器多应用运维体验,成为 Bitnami 的理想继任者。
159 0
Bitnami 替代品:Websoft9 如何接力单服务器多应用时代
|
3月前
|
资源调度 负载均衡 JavaScript
使用PM2工具部署Vue.js应用于服务器
以上步骤完成之后,你就成功利⽤ PM⼆工具将 Vuejs 应⽰程序部署至服 务 器,并且配合反向代理实现了高效稳定访问及负载均衡功能。
179 0
|
4月前
|
Java Linux 网络安全
Linux云端服务器上部署Spring Boot应用的教程。
此流程涉及Linux命令行操作、系统服务管理及网络安全知识,需要管理员权限以进行配置和服务管理。务必在一个测试环境中验证所有步骤,确保一切配置正确无误后,再将应用部署到生产环境中。也可以使用如Ansible、Chef等配置管理工具来自动化部署过程,提升效率和可靠性。
523 13

热门文章

最新文章