zoukankan      html  css  js  c++  java
  • JAVA--网络编程

      每次一提到网络就感觉瞬间变得高大上了,可是网络编程真的有那么神秘吗?接下来让我们一起来复习一下吧。

      很多人把网站编程等价于网络编程,在这里给大家纠正一下,网络编程!=网站编程,那么何为网络编程呢?网络编程时基于TCP和UDP的一种编程,例如:游戏类、社交类产品。对于TCP通讯,它是一种有问有答的一种编程,而UDP是一种类似于对讲机的一种通讯,两者各有优点,TCP相对UDP更安全,UDP相对TCP传输更快速,在游戏开发中经常使用UDP通讯。

      对于他们之间的深层区别,我就不是十分清楚了,如果你知道,请劳烦交流一下。

    下面我们以实际例子,简单介绍一下网络编程:

    一、基于TCP的简单网络连接:

      服务器端代码:

    public class TestSeriver {
    
        /**服务器端
         * @param args
         */
        public static void main(String[] args) {
            try {
                //我们的机器上一个有65526个端口,在我们设置端口时,尽量选择124以后的端口,因为124之前的端口已经被特定的程序设置,例如:80 :浏览器地址端口
                ServerSocket ss = new ServerSocket(888);//这里的888:是我们为了方便客户端的连接设置的端口号
                Socket s = ss.accept();//用来接收客户端的的连接,注意这个方法是阻塞式的,也就是说如果没有客户端连接,程序将会停留在这个位置
                System.out.println("A client connect!");
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

      客户端代码:

    public class TestClient {
    
        /**客户端
         * @param args
         */
        public static void main(String[] args) {
            try {
                Socket s = new Socket("127.0.0.1",888);//在这里说明一点,"127.0.0.1":使我们的主机号,888:是我们需要连接的端口号
            } catch (UnknownHostException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

      在这里说明一点,这种服务器--客户端连接,一次只能连接一个客户端,并且没有任何数据通信,那如何实现多客户端连接,并完成通信呢?接下来就给大家介绍一种方式:

      服务器端代码:

    public class TestSeriver1 {
    
        /**服务器端
         * @param args
         */
        public static void main(String[] args) {
            try {
                ServerSocket ss = new ServerSocket(999);
                while(true){
                    Socket s = ss.accept();
                    System.out.println("A client connect!");
                    InputStream is = s.getInputStream();
                    DataInputStream dis = new DataInputStream(is);
                    System.out.println(dis.readUTF());//这里的readUTF()方法也是阻塞式的,为了让看到这个效果我在客户端输入的地方添加了一个停顿,已经标注
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

      客户端代码:

    public class TestClient1 {
    
        /**客户端
         * @param args
         */
        public static void main(String[] args) {
            try {
                Socket s = new Socket("127.0.0.1", 999);
                OutputStream os = s.getOutputStream();
                DataOutputStream dos = new DataOutputStream(os);
                Thread.sleep(3000);//设置停顿三秒钟,关于这个我在线程的博客里有说明
                dos.writeUTF("Hello Server!");
            } catch (UnknownHostException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }

      这其中添加了一下关于JAVA--io流方面的知识,如果你感觉看不懂,我在昨天的博客中对JAVA--io流做了详细的介绍,你可以先去复习一下,在来学习网络。

      声明:以上内容如有不当,请留言,谢谢。

  • 相关阅读:
    阅读笔记
    个人总结
    《软件需求(第二版)》阅读笔记02
    《软件需求(第二版)》阅读笔记01
    问题账户需求分析
    2017年秋季个人阅读计划
    阅读笔记一之《软件需求与分析》
    每日总结1
    开发体会(模块3.商品分类管理)
    个人总结
  • 原文地址:https://www.cnblogs.com/AndroidJotting/p/3939144.html
Copyright © 2011-2022 走看看