如何应用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,如需转载请自行联系原作者


相关文章
SshClient应用指南:使用org.apache.sshd库在服务器中执行命令。
总结起来,Apache SSHD库是一个强大的工具,甚至可以用于创建你自己的SSH Server。当你需要在服务器中执行命令时,这无疑是非常有用的。希望这个指南能对你有所帮助,并祝你在使用Apache SSHD库中有一个愉快的旅程!
90 29
阿里云操作系统控制台——ECS操作及云计算应用实践
本文详细介绍了云服务器ECS的使用流程,包括开通服务、系统配置、权限管理、组件安装及内存全景诊断等关键步骤。通过开通阿里云操作系统服务、授予RAM用户权限和安装必要组件,可实现对服务器的有效管理与维护。在内存诊断部分,展示了如何发起诊断并解析结果,帮助精准定位内存问题。此外,文章还讲解了利用ECS训练模型的操作方法,从上传文件到终端命令执行,直至完成模型训练。最后总结指出,掌握这些技能不仅提升了对云服务器架构的理解,还为实际业务提供了高效解决方案,展现了ECS在数据处理与分析中的重要价值。
125 8
阿里云操作系统控制台——ECS操作及云计算应用实践
如何优化 SSR 应用以减少服务器压力
优化SSR应用以减少服务器压力,可采用代码分割、缓存策略、数据预加载、服务端性能优化、使用CDN、SSR与SSG结合、限制并发请求、SSR与CSR平滑切换、优化前端资源及利用框架特性等策略。这些方法能有效提升性能和稳定性,同时保证用户体验。
145 4
阿里云服务器ECS通用型规格族解析:实例规格、性能基准与场景化应用指南
作为ECS产品矩阵中的核心序列,通用型规格族以均衡的计算、内存、网络和存储性能著称,覆盖从基础应用到高性能计算的广泛场景。通用型规格族属于独享型云服务器,实例采用固定CPU调度模式,实例的每个CPU绑定到一个物理CPU超线程,实例间无CPU资源争抢,实例计算性能稳定且有严格的SLA保证,在性能上会更加稳定,高负载情况下也不会出现资源争夺现象。本文将深度解析阿里云ECS通用型规格族的技术架构、实例规格特性、最新价格政策及典型应用场景,为云计算选型提供参考。
深度学习在资源利用率优化中的应用:让服务器更聪明
深度学习在资源利用率优化中的应用:让服务器更聪明
145 6
2分钟在阿里云ECS控制台部署个人应用(图文示例)
作为一名程序员,我在部署托管于Github/Gitee的代码到阿里云ECS服务器时,经常遇到繁琐的手动配置问题。近期,阿里云ECS控制台推出了一键构建部署功能,简化了这一过程,支持Gitee和GitHub仓库,自动处理git、docker等安装配置,无需手动登录服务器执行命令,大大提升了部署效率。本文将详细介绍该功能的使用方法和适用场景。
2分钟在阿里云ECS控制台部署个人应用(图文示例)
网站应用项目如何选择阿里云服务器实例规格+内存+CPU+带宽+操作系统等配置
对于使用阿里云服务器的搭建网站的用户来说,面对众多可选的实例规格和配置选项,我们应该如何做出最佳选择,以最大化业务效益并控制成本,成为大家比较关注的问题,如果实例、内存、CPU、带宽等配置选择不合适,可能会影响到自己业务在云服务器上的计算性能及后期运营状况,本文将详细解析企业在搭建网站应用项目时选购阿里云服务器应考虑的一些因素,以供参考。
Swift 是苹果公司开发的现代编程语言,具备高效、安全、简洁的特点,支持类型推断、闭包、泛型等特性,广泛应用于苹果各平台及服务器端开发
Swift 是苹果公司开发的现代编程语言,具备高效、安全、简洁的特点,支持类型推断、闭包、泛型等特性,广泛应用于苹果各平台及服务器端开发。基础语法涵盖变量、常量、数据类型、运算符、控制流等,高级特性包括函数、闭包、类、结构体、协议和泛型。
112 2
Linux系统在服务器领域的应用与优势###
本文深入探讨了Linux操作系统在服务器领域的广泛应用及其显著优势。通过分析其开源性、安全性、稳定性和高效性,揭示了为何Linux成为众多企业和开发者的首选服务器操作系统。文章还列举了Linux在服务器管理、性能优化和社区支持等方面的具体优势,为读者提供了全面而深入的理解。 ###

热门文章

最新文章