zoukankan      html  css  js  c++  java
  • day31_网络通信三要素 TCP Socket关键字 ServerSocket

    今日内容

    • 网络通信三要素

    • TCP

    • Socket关键字

    • ServerSocket

    网络编程三要素  

      三要素包含:协议,IP地址,端口号。

    协议:指的是计算机中,网络通讯必须遵守的规则

    IP地址:互联网协议地址,俗称IP,给网络中的计算机设备编订了一个唯一的编号。

    端口号:如何区分在网络通信中打开的这些进程(应用程序)?通过端口号可以准确的找到

    可以通过DOS命令查看本机的IP地址:ipconfig
    
    检查网络连接是否正常  ping ip地址。

      IP地址分类:

    IPv4:是一个32位的二进制数,通常被分为4个字节,表示形式:a.b.c.d ; 例如:192.168.53.245,其中a.b.c.d都是一个0~255之间的十进制的整数,那么最多能够表示42亿个。
    
    IPv6:为了扩大地址空间,通过IPv6重新定义地址空间,采用128位的地址长度,16个字节一组,分成8组十六进制数:ABCD:EF01:2345:6789:ABCD:EF​01:2345:6789,号称互联网中的任何一粒沙子都能够编写进去,解决了地址不够的问题。
    
    特殊的IP地址:127.0.0.1(固定数字)   localhost  通过hosts文件,可以自定义自己的域名

      端口号:

    用两个字节表示的整数,它的取值范围是0~65535,其中,0~1023之间的端口号已经被一些知名的应用和网络服务占用了,普通的常规的应用程序只能使用从1024以上的端口号,如果端口号被另外一个服务或者应用程序占用了,会导致当前程序启动失败。
    
    常用的端口号:
            Tomcat:8080
            HTTP服务器:80  www.baidu.com:80   80的端口可以选择省略不写
            数据库服务器:MYSQL:3306     Oracle:1521
            idea:63342

    利用 协议+ip地址+端口号  三要素组合,就可以标识网络中的任意一个进程了,那么进程间的通信就可以利用这种标识进行造作了

    TCP通信程序

    TCP通信能够实现两台计算机之间的数据交互,通信的两端,要严格区分客户端(Client)和服务器端(Server)。
    两端通信的步骤:
    ​    1.服务端首先需要启动,等待客户端的连接
    ​    2.客户端需要主动的连接服务器端,连接成功才能通信服务器端不可以主动连接客户端。
    在Java当中,提供了两个类用于实现TCP通信:
    客户端:java.net.Socket类。创建Socke对象,向服务器端发送连接请求,服务端回应一个请求,两者开始建立连接进行通信
    服务器端:java.new.ServerSocket类。创建ServerSocket对象,相当于开启了一个服务,等待客户端的连接。

    Socker类

    Socker类实现客户端套接字,套接字指的是两台设备之间通讯的端点。

      构造方法:

        public Socker(String host,int port): 创建套接字对象并将其连接到指定主机(服务器端)上的指定端口号,如果指定的host是null,则相当于指定地址为回送地址。
    
    备注:回送地址(123.x.x.x)是本机回送地址(loopback address),主要用于网络软件测试用的本机上的进程间的通信,无论什么程序,一旦使用回送地址发送数据,这个数据立即返回,不进行任何网络传输数据。

      成员方法:

    public InputStream getInputStream():  获取套接字的输入流
    public OutputStream getOutputStream(): 关闭此套接字
    public void close():  关闭此套接字
    public void shutdownOutput():  禁用此套接字的输入流
    任何先前写入的数据都将会被发送,随后终止此输出流。

      ServerSocket类

      ServerSocket类实现了服务器端套接字,该对象等待通过网络的请求。

      构造方法:

    public ServerSocket(int port):  使用该构造方法在创建ServerSocket对象时,就可以将其绑定到一个指定的端口号上,参数port就是端口号

      成员方法

    public Socket accept():  监听并接受连接,返回一个新的Socket对象,用于和客户端实现通信,该方法会一直阻塞直到建立连接。

    举例:

    创建客户端:
    
        public static void main(String[] args) throws IOException {
            //1.创建一个Socket客户端对象,构造方法中绑定服务器中的IP地址和端口号
            Socket socket = new Socket("192.168.53.202", 6666);
            //2.使用Socket对象中的方法getoutputStream获取网络字节输出流对象
            OutputStream os = socket.getOutputStream();
            //3.使用网络字节输出流对象中的方法write, 给服务器发送数据
            os.write("我好想你呢".getBytes());
            //4.使用Socket对象中的方法getInputStream()获取网络字节输入流对象
            InputStream is = socket.getInputStream();
            //5.使用网络字节输入流对象调用read方法,读取服务器回写的数据
            byte[] bytes = new byte[1024];
            int len =is.read(bytes);//有效字节个数
            //打印服务器回传的数据
            System.out.println(new String(bytes,0,len));
            //释放资源
            socket.close();
        }
    
    创建服务器:
    
        public static void main(String[] args) throws IOException {
            //1.创建ServerSocket服务器端对象和系统指定的端口号
            ServerSocket server = new ServerSocket(6666);
            //2.使用ServerSocket对象中的方法accept,获取客户端请求的连接,拿到Socket对象
            Socket socket = server.accept();
            //3.使用Socket对象中的方法getInputStream(),可以获取网络字节输入流对象
            InputStream is = socket.getInputStream();
            //4.使用网络字节输入流对象中的方法read,读取客户端发送的数据
            byte[] bytes = new byte[1024];
            int len =is.read(bytes);//
            //打印接收客户端发送的数据
            System.out.println(new String(bytes,0,len));
            // 5.使用Socket对象中的方法getOutputStream(),获取   网络字节输出流对象
            OutputStream os = socket.getOutputStream();
            //6.使用网络字节输出流对象中的方法write,给客户端回写数据
            os.write("我收到了你的请求".getBytes());
            //7.释放资源(ServerSocket,Socket)
            os.close();
        }
  • 相关阅读:
    【POJ 3162】 Walking Race (树形DP-求树上最长路径问题,+单调队列)
    【POJ 2152】 Fire (树形DP)
    【POJ 1741】 Tree (树的点分治)
    【POJ 2486】 Apple Tree (树形DP)
    【HDU 3810】 Magina (01背包,优先队列优化,并查集)
    【SGU 390】Tickets (数位DP)
    【SPOJ 2319】 BIGSEQ
    【SPOJ 1182】 SORTBIT
    【HDU 5456】 Matches Puzzle Game (数位DP)
    【HDU 3652】 B-number (数位DP)
  • 原文地址:https://www.cnblogs.com/rxqq/p/14157687.html
Copyright © 2011-2022 走看看