协议:为进行网络中的数据交换(通信)而建立的规则、标准或约定。(=语义+语法+规则)
TCP/IP已成为Internet上通信的工业标准。
TCP/IP模型:
TCP协议是一个面向连接的可靠性传输协议,在发送数据之前,先要发出连接请求,当对方监听到有请求来到时就建立连接,然后双方就可以收发消息,发送完信息后,双方就断开连接(即三次握手协议).
三次握手协议:
第一次握手:
建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SENT状态,等待服务器确认;SYN:同步序列编号(Synchronize Sequence Numbers)。
第二次握手:
服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手:
客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。
socket:
为了能够方便的开发网络应用软件,由美国伯克利大学在Unix上推出了一种应用程序访问通信协议的操作系统调用---socket(套接字)。socket的出现,使程序员可以很方便地访问TCP/IP,从而开发各种网络应用的程序。随着Unix的应用推广,套接字在编写网络软件中得到了极大的普及。后来,套接字又被引进了Windows
等操作系统中。Java语言也引入了套接字编程模型。
基于TCP的socket编程:(Socket类和ServerSocket类)
客户端程序编写:
①调用Socket()创建一个流套接字,并连接到服务器端;
②调用Socket类的getOutputStream()和getInputStream获取输出流和输入流,开始网络数据的发送和接收。
③最后关闭通信套接字。
服务器程序编写:
①调用ServerSocket(int port)创建一个服务器端套接字,并绑定到指定端口上;
②调用accept(),监听连接请求,如果客户端请求连接,则接受连接,返回通信套接字。
③调用Socket类的getOutputStream()和getInputStream获取输出流和输入流,开始网络数据的发送和接收。
④最后关闭通信套接字。
UDP协议是一种面向无连接的不可靠的协议,也就是在进行数据通讯之前发送端和接收端无需进行连接,发送端要发送数据,只需构造数据报,并将接收端的地址放入数据报中,然后将其发送出去就可以了.
该协议是一种不可靠的协议,因为收发放没有连接过程, 发送出去的数据有可能中途丢失,并且发送端还得不到反馈.所以在实现UDP协议的程序中,最关键是如何实现UDP的数据报
JAVA中提供了实现UDP协议的两个关键类
数据报类(DatagramPacket):构建一个数据报,里面可以放入要发送的数据以及接收端的地址.
UDP端类(DatagramSocket):构建实行UDP功能的发送端与接收端,实现发送与接收数据报.
UDP协议网络编程方法:
接收端程序编写:
①调用DatagramSocket(int port)创建一个数据报套接字,并绑定到指定端口上;
②调用DatagramPacket(byte[] buf, int length),建立一个字节数组以接收UDP包 。
③调用DatagramSocket类的receive(),接收UDP包。
④最后关闭数据报套接字。
发送端程序编写:
①调用DatagramSocket()创建一个数据报套接字;
②调用DatagramPacket(byte[] buf, int offset, int length, InetAddress address, int port),建立要发送的UDP包。
③调用DatagramSocket类的send(),发送UDP包。
④最后关闭数据报套接字。