一,网络通信协议
通过计算机网络可以使多台计算机实现连接,位于同一个网络中的计算机在进行连接和通信时需要遵守一定的规则。
连接和通信的规则被称为网络通信协议,它对数据的传输格式、传输速率、传输步骤等做了统一规定,通信双方必须同时遵守才能完成数据交换。
网络通信协议有很多种,应用最广泛的是
TCP/IP协议
Transmission Control Protocal/Internet Protoal
传输控制协议/英特网互联协议
它包括TCP协议和IP协议
UDP(User Datagram Protocol)协议
ICMP(Internet Control Message Protocol)协议
OSI模型
TCP/IP协议模型
• 链路 层:用于定义物理传输通道,通常是对某些网络连接设备的驱动协议,例如针对光纤、 双绞线 提供的驱动
• 网络层:整个 TCP/IP 协议的核心,它主要用于将传输的数据进行分组,将分组数据发送到目标计算机或者网络。
• 运输层:主要使网络程序进行通信,在进行网络通信时,可以采用 TCP 协议,也可以采用 UDP 协议。• 应用层:主要负责应用程序的协议,例如HTTP协议、FTP协议等。
IP地址和端口号
TCP/IP协议中,IP地址唯一标识一台计算机。
目前,IP地址广泛使用的版本是IPv4,它是由4个字节大小的二进制数来表示。
IP地址也可写成十进制的形式,每个字节用一个十进制数字(0-255)表示,数字间用符号“.”分开,如 “10.0.0.1”。
计算机中不同的应用程序通过端口号区分。
端口号是用两个字节(16位的二进制数)表示的,它的取值范围是0~65535。
0~1023之间的端口号用于一些知名的网络服务和应用,用户的普通应用程序需要使用1024以上的端口号
InetAdderss
InetAdderss类用于封装一个IP地址,并提供了一系列与IP地址相关的方法。
二,UDP通信
UDP(User Datagram Protocol)协议
用户数据报协议,一种无连接通信协议,数据传输时,数据的发送端和接收端不建立逻辑连接。
当一台计算机向另外一台计算机发送数据时,发送端不会确认接收端是否存在,就会发出数据,同样接收端在收到数据时,也不会向发送端反馈是否收到数据
由于UDP的面向无连接性,不能保证数据的完整性,因此在传输重要数据时不建议使用UDP协议
DatagramPacket
DatagramPacket类的实例对象就相当于一个集装箱,用于封装UDP通信中发送或者接收的数据。
创建DatagramPacket对象的构造方法:
DatagramPacket(byte[ ] buf,int length
DatagramPacket(byte[ ] buf,int length,InetAddress addr,int port)
DatagramPacket(byte[ ] buf,int offset,int length)
DatagramPacket(byte[ ] buf,int offset,int length,InetAddress
addr,int port)
DatagramPacket类中的常用方法
DatagramSocket
DatagramSocket类的作用类似于码头,使用这个类的实例对象可以发送和接收DatagramPacket数据包。
创建发送端和接收端的DatagramSocket对象时,使用的构造方法也有所不同,DatagramSocket类中常用的构造方法如下所示:
DatagramSocket()
DatagramSocket(int port)
DatagramSocket(int port,InetAddress addr)
DatagramSocket类中的常用方法
UDP网络程序
实现UDP通信(创建发送端程序和接收端程序)
UDP案例—聊天程序
三,TCP通信
TCP(Transmission Control Protocol)协议
传输控制协议,一种面向连接的通信协议,可以保证两台计算机之间可靠无差错的数据传输。在TCP连接中必须要明确客户端与服务器端,由客户端向服务端发出连接请求,每次连接的创建都需要经过“三次握手”。
TCP通信同UDP通信一样,能实现两台计算机之间的通信,通信的两端都需要创建socket对象。TCP通信严格区分客户端与服务器端,通信时,必须先由客户端去连接服务器端才能实现通信,服务器端不可以主动连接客户端,并且服务器端程序需要事先启动,等待客户端的连接。
Socket类,用于表示客户端。
ServerSocket类,用于表示服务器端
ServerSocket
ServerSocket对象可以实现一个服务器段的程序
ServerSocket类提供了多种构造方法:
ServerSocket()
ServerSocket(int port)ServerSocket(int port, int backlog)
ServerSocket(int port, int backlog, InetAddress
bindAddr)
ServerSocket对象的常用方法
Socket
Socket对象用于实现TCP客户端程序。
构造方法:
Socket()
Socket(String host, int port)
Socket(InetAddress address, int port)
最常用的是第一个构造方法。
Socket对象的常用方法:
简单的TCP网络程序
实现TCP通信需要创建一个服务器端程序和一个客户端程序。
为保证数据传输的安全性,首先需要实现服务器端程序。
接下来编写客户端程序
开启服务端程序,线程发生阻塞,等待客户端访问
开启客户端程序,向服务端发送数据
服务端结束阻塞,与客户端开始交互数据,交互完成,通信结束
多线程的TCP网络程序
很多服务器端程序允许被多个应用程序访问
多个客户端访问同一个服务器端。
服务器端为每个客户端创建一个对应的Socket,并且开启一个新的线程使两个Socket建立专线进行通信