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流做了详细的介绍,你可以先去复习一下,在来学习网络。

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

原文地址:https://www.cnblogs.com/AndroidJotting/p/3939144.html