网络编程入门笔记(一)

网络通信协议

目前应用最广泛的是TCP/IP协议(Transmission Control Protocal/Internet Protocal传输控制协议/英特网互联协议),它是一个包括TCP协议和IP协议,UDP(User Datagram Protocal)协议和其它一些协议的协议组

TCP/IP协议中的四层分别是应用层、传输层、网络层和链路层,每层分别负责不同的通信功能。

链路层:链路层是用于定义物理传输通道,通常是对某些网络连接设备的驱动协议,例如针对光纤、网线提供的驱动。

网络层:网络层是整个TCP/IP协议的核心,它主要用于将传输的数据进行分组,将分组数据发送到目标计算机或者网络。

运输层:主要使网络程序进行通信,在进行网络通信时,可以采用TCP协议,也可以采用UDP协议。

应用层:主要负责应用程序的协议,例如HTTP协议、FTP协议等

IP地址和端口号

在TCP/IP协议中要想使网络中的计算机能够进行通信,必须为每台计算机指定一个标识号就是IP地址

IP地址广泛使用的版本是IPv4,它是由4个字节大小的二进制数来表示。通常会将IP地址写成十进制的形式,每个字节用一个十进制数字(0-255)表示,数字间用符号“.”分开

想访问目标计算机中的某个应用程序,还需要指定端口号

扫描二维码关注公众号,回复: 2490878 查看本文章

UDP协议

UDP是无连接通信协议,即在数据传输时,数据的发送端和接收端不建立逻辑连接,不能保证数据的完整性

UDP协议特点:
                1).数据需要打包发送;
                2).数据包的大小有限制--64k
                3).发送时可以没有接收端,所以被称为不安全的协议。
                    例如:共屏软件、视频会议...

TCP协议

TCP协议是面向连接的通信协议,即在传输数据前先在发送端和接收端建立逻辑连接,然后再传输数据

第一次握手,客户端向服务器端发出连接请求,等待服务器确认,

第二次握手,服务器端向客户端回送一个响应,通知客户端收到了连接请求,

第三次握手,客户端再次向服务器端发送确认信息,确认连接

TCP协议特点:
                1).数据不需要打包;
                2).数据大小无限制;
                3).发送时必须要有接收端,所以被称为安全的协议。
                    例如:文件上传,点对点聊天

  1. (UDP协议发送数据)
        public static void main(String[] args) throws IOException {
            //1.创建一个DatagramSocket对象
            DatagramSocket socket = new DatagramSocket();
            //2.准备数据:
            InetAddress ip = InetAddress.getByName("127.0.0.1");//目标IP
            int port = 8888;//目标端口
            byte[] data = "你好,吃了吗?".getBytes();//信息内容
            // 3.准备一个"数据包"对象:DatagramPacket,将上面准备的传给数据包对象;
            DatagramPacket pck = new DatagramPacket(data,        //信息的byte[]数组
                            data.length,        //信息长度
                            ip,            //目标IP
                            port);            //目标端口
            
            //4.调用DatagramSocket对象的send()发送"数据包"
            socket.send(pck);
            
            //5.关闭连接
            socket.close();
            System.out.println("发送完毕!");
            
        }
  2. (UDP协议接收数据)
        public static void main(String[] args) throws IOException {
            //1.创建一个DatagramSocket(int 本机监听端口)对象
            DatagramSocket socket = new DatagramSocket(8888);
            //2.创建一个空的byte[]数组,准备接收信息;
            byte[] byteArray = new byte[1024];
            //3.创建一个空的数据包对象(DatagramPacket),将byte[]数组传给它。
            DatagramPacket pck = new DatagramPacket(byteArray,byteArray.length);
            //4.4.使用socket对象的receive()接收数据,
            System.out.println("等待数据...");
            socket.receive(pck);//注意:程序将会在这里被阻塞
            System.out.println("有数据到达...");
            
            //5.解析数据包,获取数据。
            byte[] data = pck.getData();
            String s = new String(data,0,pck.getLength());
            System.out.println("接收到信息:" + s);
            
            // 6.关闭连接
            socket.close();
        }
  3. TCP通信首先创建代表服务器端的ServerSocket对象,该对象相当于开启一个服务,并等待客户端的连接,然后创建代表客户端的Socket对象向服务器端发出连接请求,服务器端响应请求,两者建立连接开始通信
  4. (TCP协议发送数据)
        public static void main(String[] args) throws IOException {
            //1.创建一个Socket(String 目标IP,int 目标端口)对象。
            Socket socket = new Socket("127.0.0.1",8888);
            //2.由于要发送数据,所以要从Socket中获取一个"输出流--OutputStream"。
            OutputStream out = socket.getOutputStream();
            //3.使用输出流输出数据;
            out.write("你好,吃的啥?".getBytes());
            //4.关闭连接
            socket.close();
            
            System.out.println("客户端发送完毕!");
        }       

  5. (TCP协议接收数据)
        public static void main(String[] args) throws IOException {
            //1.创建一个ServerSocket(int 本机监听端口)对象
            ServerSocket server = new ServerSocket(8888);
            //2.等待连接,如果有客户端连接成功,会产生一个Socket对象,并继续执行;
            Socket socket = server.accept();//程序会在这里阻塞,等待客户端连接
            //3.通过Socket对象获取一个输入流。
            InputStream in = socket.getInputStream();
            //4.通过输入流读取数据;
            byte[] byteArray = new byte[1024];
            int len = in.read(byteArray);
            String s = new String(byteArray,0,len);
            System.out.println("服务器端收到信息:" + s);
            
            //5.关闭连接
            socket.close();
            server.close();
            
        }                                                                                                                                                                             

猜你喜欢

转载自blog.csdn.net/minecodelife/article/details/81131590