IP可以定位到某台电脑,ip+port可以定位到某台电脑某个应用程序。
端口号:逻辑端口,由操作系统负责,对每个程序进行分配,一个号码对应一个程序。只能一对一对应,比如windows给微信分配8000端口,给QQ分配6000端口,端口号范围0-65535,1024之前的端口号已经被操作系统占用了。
java.net.InetAddress这个类没有构造方法,就不能new只能调用这个类的静态方法,没有构造方法的类,只能调用其静态方法。
传输层的两个高级协议:
UDP:udp是无连接通讯协议,即在数据传输时,数据的发送端和接收端不建立逻辑连接。简单来说,当一台计算机向另一台计算机发送数据的时候,
发送端不会确认接收端是否存在,就会发出数据,同样接收端在收到数据时,也不会向发送端反馈是否收到数据。
由于使用UDP协议消耗资源小,通讯效率高,所以通常用于音频,视频和普通数据的传输。例如视频会议,QQ用udp,因为这种情况即使偶尔
丢失一两个数据包,也不会对接收结果产生太大影响,由于UDP的面向无连接性,不能保证数据的完整性,传输重要数据的时候不推荐使用udp协议。
TCP:TCP协议是面向连接的通讯协议,即在传输数据前先在发送端和接收端建立逻辑连接,然后再传输数据,它提供了两台计算机之间可靠无差错的数据传输,三次握手,
为了保证数据的完整性,传输文件的时候必须使用TCP协议。
UDP通信:
DatagramPacket类的作用就是包装数据,相当于是集装箱,DatagramSocket类的作用相当于是码头,负责发送和接收数据。
实现UDP协议的发送端:
* 实现封装数据的类 java.net.DatagramPacket 将你的数据包装
* 实现数据传输的类 java.net.DatagramSocket 发送和接收数据包
套接字:就是绑定ip,port的网络对象。
DatagramSocket.receive(DatagramPacket)会一直处于等待状态,直到接收到对方请求的数据。
TCP通信:
TCP通信同UDP通信一样,都能实现两台计算机之间的通信,通信的两端都需要创建socket对象。
TCP和UDP的区别在于:UDP中只有发送端和接收端,不区分服务器端和客户端,计算机之间可以任意发送数据。而TCP通信是严格区分客户端和服务器端,在
通信时,必须先由客户端去连接服务器端才能实现通信,服务器不可以主动连接客户端,并且服务器端程序需要事先启动,等待客户端的连接。
在JDK中提供了两个类用于实现TCP程序,一个是ServerSocket类,用于表示服务器端,一个是Socket类,用于表示客户端。
客户端服务器端数据交换,必须使用套接字对象Socket中的获取的IO流,自己new流,不行,因为客户端和服务器端连通的时候,IO对象就已经被创建。
对于TCP和UDP来说,接收端都是具有线程等待效果,如果接收端没有接收到数据,就会一直处于等待接收数据状态,还有就是接收可以指定某个端口接收,但是
发送的端口是由操作系统分配。
通常情况下Socket连接就是TCP连接
socket则是对TCP/IP协议的封装和应用(程序员层面上)。也可以说,TPC/IP协议是传输层协议,主要解决数据如何在网络中传输,而HTTP是应用层协议,主要解决如何包装数据。
关于TCP/IP和HTTP协议的关系,网络有一段比较容易理解的介绍: “我们在传输数据时,可以只使用(传输层)TCP/IP协议,但是那样的话,如果没有应用层,便无法识别数据内容,如果想要使传输的数据有意义,则必须使用到应用层协议,应用层协议有很多,比如HTTP、FTP、TELNET等,也可以自己定义应用层协议。WEB使用HTTP协议作应用层协议,以封装HTTP文本信息,然后使用TCP/IP做传输层协议将它发到网络上。”
我们平时说的最多的socket是什么呢,实际上socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API),通过Socket,我们才能使用TCP/IP协议。