Digdata Development Java__Study_12(Java实现服务器与客户端)

/*
         * 两个计算机进行通信,数据交换需要 3 部分
         * 
         * 1. IP:网络上计算机的唯一标识
         * 2. 协议:规定了交换的数据以什么格式组织
         *      TCP
         *      UDP
         * 3. 端口号:用来区分计算机上的不同程序
         * 
         * Java 中使用 Socket 技术实现网络通信
         * 
         * 通信的两台设备:
         *      一个叫做服务器:
         *      一个叫做客户端:
         */

Server

//需要关闭的流可以用try with resource进行关闭

public static void main(String[] args) {

        // Server 就是服务器上的程序
        // 服务器不能重复启动,同一个端口,不允许同时有多个程序使用

        try {
            /*
             * 创建服务器 ServerSocket,并绑定端口号
             * 发送到 8889 端口的数据,都会交由我们这个程序进行处理
             * 端口号范围是:0-65535,0-1023 都被系统占用了,我们的程序不能使用
             * 
             * ServerSocket 才用的是 TCP 协议(Transmission Control Protocol)
             *      是一种可靠的数据传输协议,能够确保数据一定送到,送不到会给你反馈
             */
            ServerSocket serverSocket = new ServerSocket(8889);

            System.out.println("---- 服务器创建成功,等待客户端的链接 ----");


            /*
             * 等待客户端的链接,程序进入阻塞状态
             * 后边的代码都不执行,直到有客户端链接上
             * 返回值就是链接上的客户端 Socket 对象
             */
            Socket socket = serverSocket.accept();

            System.out.println("---- 客户端链接成功 ----");

            /*
             * 使用输入流接收客户端发送的数据
             */
            InputStream inputStream = socket.getInputStream();

            // InputStreamReader:把字节流转换为字符流
            InputStreamReader inputStreamReader = new InputStreamReader(inputStream);

            // 增加缓冲区
            BufferedReader bufferedReader = new BufferedReader(inputStreamReader);

            // 读取数据
            String content = bufferedReader.readLine();

            System.out.println("---- 客户端说:" + content);


            // 结束输入
            socket.shutdownInput();




            // 使用输出流把文字发送给客户端:你好,我是服务器
            OutputStream outputStream = socket.getOutputStream();

            PrintWriter printWriter = new PrintWriter(outputStream);

            printWriter.write("你好,我是服务器");

            printWriter.flush();

            // 结束输出
            socket.shutdownOutput();

            // 关闭流
            printWriter.close();
            outputStream.close();


            bufferedReader.close();
            inputStreamReader.close();
            inputStream.close();

        } catch (IOException e) {

            e.printStackTrace();
        }
    }

Client


    public static void main(String[] args) {

        // Client 客户端上的程序

        try {
            /*
             * 创建客户端:
             * 1. 服务器的主机名:服务器的 ip 地址
             *      自身的 ip/127.0.0.1/localhost
             * 2. 服务器端口号:
             * 
             * 自动链接到对应的服务器上
             */
            Socket socket = new Socket("127.0.0.1", 8889);

            System.out.println("---- 客户端链接服务器成功 ----");

            /*
             * 使用输出流把数据发送给服务器
             * 
             * getOutputStream() 获得对应的字节输出流
             */
            OutputStream outputStream = socket.getOutputStream();

            // 转换为 PrintWriter 的字符输出流,方便传输文字
            // 字节流转换为字符输出流
            PrintWriter printWriter = new PrintWriter(outputStream);

            printWriter.write("你好,我是客户端");

            // PrintWriter 是具有缓冲区的,
            // 需要通过 flush() 把没有填满缓冲区的数据给传输出去
            printWriter.flush();

            // 结束输出
            socket.shutdownOutput();

            // 关闭流



            //
            InputStream inputStream = socket.getInputStream();

            InputStreamReader inputStreamReader = new InputStreamReader(inputStream);

            BufferedReader bufferedReader = new BufferedReader(inputStreamReader);

            String content = bufferedReader.readLine();

            System.out.println(content);

            //
            socket.shutdownInput();

            bufferedReader.close();
            inputStreamReader.close();
            inputStream.close();

            printWriter.close();
            outputStream.close();
        } catch (UnknownHostException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
写文章,查论文或看文献的时候,面对许多图表,要引用别人的数据,或者想把自己的数据处理结果和别人的数据对比一下,可是怎么才能从别人的论文或文献中把数据提取出来了呢? 如果你有这方面的需求,那么你来对了地方.试试DataDig吧! 第4.5.0版发布预告 正式发布日期:2013-01-01 全面支持win xp、win 7和win 8系统. 增加自动识别数据点的功能,自动识别曲线的代码以后再加上... 下面地址是这个版本的测试版,正式发布要等到2013-01-01...... http://pan.baidu.com/share/link?shareid=160433&uk=704678057/ 也可以在CSDN和新浪分享中搜索一下! 第4.0.0版发布 发布日期:2012-12-01 主要是增加和改善对win 8系统的支持. 全面支持win xp、win 7和win 8系统. 根据网友的反馈,改善部分功能。。。。。。 积分不够下载的用户,可发邮件至539688300@qq.com,我会不定期的回复邮件,并以附件的形式发给需要的用户。 下一版本将增添点和曲线的自动识别功能,敬请关注! 第3.6.0版发布 全面支持win xp和win 7系统. 根据网友改善用户体验; 使用方法: 1.打开bmp文件或jpg文件 2.选择坐标系统(线形坐标或对数坐标,共9种) 3.标定任意两个点(常用左上角和右下角) 4.按住ctrl点击数据点或拖动鼠标 5.保存数据. 6.其它操作:去掉重复的数据,删除鼠标处的坏数据,去掉最后一个数据等等. 主要功能: 1.可选择精确使用鼠标点击或拖动数据获取图表上的数据; 2.增强的放大镜功能可使数据获取更精确; 3.可剔去冗余、重复和误操作获得的数据; 4.实时动态显示获取过程; 5.保存的数据可方便使用Origin,Sigmaplot,Excel和文本编辑器等打开查看; 6.对获取的数据自动排序; 7.支持三种常规坐标(线形坐标系和两种对数坐标系)的任意组合, ..... 相对于第2版,作了如下优化: 最大的变化是增加了自然对数坐标. 1.加快程序运行速度; 2.优化了数据保存和加载; 3.多线程支持,且不需要额外的库或DLL. 4.以前只支持bmp格式,现在增加jpg格式的图像; 5.其它API函数的优化; 第二版发布信息; 主要功能: 1.可选择精确使用鼠标点击或拖动数据获取图表上的数据; 2.增强的放大镜功能可使数据获取更精确; 3.可剔去冗余、重复和误操作获得的数据; 4.实时动态显示获取过程; 5.保存的数据可方便使用Origin,Sigmaplot,Excel和文本编辑器等打开查看; 6.对获取的数据自动排序; 第一版发布信息: 自动曲线图表数字化软件; 写论文必备的工具之一读取图表上数据的神奇小软件Datadig; 比WinDig更加简单高效 1.支持双线性直角坐标 2.支持双对数直角坐标; 3.支持对数-线性混合坐标; 4.局部放大,便于观察数据细节; 5.动态实时显示获取的数据; 6.支持数据纠错功能,方便删对错误的或重复的数据; 7.支持数据排序; 8.优化数据保存; 9.可对比原始数据和您使用本软件获取的数据; 10.本软件属绿色软件,无插件和病毒,无须注册完全免费使用. 11.绝对禁止使用本软件剽窃他人论文成果,或用于其它非道德和不法途径; 本软件是绿色软件,完全免费,无任何插件和广告,欢迎大家使用!如果您觉得该软件好,请积极反馈你的意见供下次时改进!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值