IP是电脑在互联网上的唯一标识。
也可以使用主机名(计算机名)在网络中找到主机。但是电脑的主机名可能会重复,会带来不安全的因素,所以后来就用IP地址表示电脑的定向。
IP地址的构成:
- 本质是4个二进制数
- 十进制:数字1 数字2 数字3 数字4
- 二进制:11111111 10100001 10101011 00000010
- 由于每个数字均有一个字节翻译成十进制的数字,所以最大的是255
java中的InetAddress代表地址,主要是IP地址。
获取地址的对象:
- public static InetAddress getLocalhost() throws UnkownHostException:获取本地的主机
- public static InetAddress getByName(String host) throws UnkownHostException:依据主机名(ip地址)获取主机
通过地址对象获取ip字符串或者主机名称
- public static getHostName():获取主机的名字
- public static getHostAddress():获取主机的字符串形式的ip
udp
UDP是一个传输协议:
特点:传输的效率高,但是不稳定,存在丢包的情况
通常用于不是非常要求专业的传输,比如:微信语音和视频,网络游戏等
java中提高好了这个内容:
发生和接受数据都使用Socket类:套接字
DatagramSocket
数据打包相关的类:
DategramPacket
udp实现
使用udp的步骤:
1.建立连接:DatagramSocket(int port):指定端口,方便发送端寻找
2.建立数据包,用于接收数据:DatagramSocket(byte[] buf,int langth)
3.调用socket的方法
4.解析数据
5.关闭socket
ps:发送端和接收端都是相对的程序。

tcp
TCP协议通过三次握手协议将客户端与服务器端连接,两端使用各自的Socket对象。Socket对象中包含了IO流,供数据传输。
即:TCP协议在客户端与服务器端通过Socket组成了io通道,数据在io通道中传输,客户端传输的数据成队列方式写出,服务器端接收,同样服务器端传输的数据成队列方式写出,客户端接收。
tcp实现
Socket客户端与ServerSocket服务器端:
1.建立客户端和服务器端;
2.建立连接后,通过Socket中的io流进行数据的传输,(如果是服务器端,则需要添加一步操作:通过Socket服务获取Socket,再获取其中的io流)
3.关闭socket。
注意:
1.服务器端开启后等待客户端访问,可以不关闭
2.一个服务器可以对应多个客户端
3.不同客户端间通信可以通过服务器端中传信息
三次握手协议
大白话:
- A给B打电话,B接通了,B回答:喂,你是谁?(表示AB第一次通信成功,B收到了A的信息)(第一次握手成功)
- A听见了B的问题,A回答:我是XX。(说明A知道B接到了电话)(第二次握手成功)
- B听见A的回复,B回答:哦。(B等待A,你找我干嘛,重复一次对话)(第三次握手成功)
标准解释:**
- 第一次握手:建立连接。客户端发送连接请求报文段,将SYN位置为1,Sequence Number为x;然后,客户端进入SYN_SEND状态,等待服务器的确认;
- 第二次握手:服务器收到SYN报文段。服务器收到客户端的SYN报文段,需要对这个SYN报文段进行确认,设置Acknowledgment Number为x+1(Sequence Number+1);同时,自己自己还要发送SYN请求信息,将SYN位置为1,Sequence Number为y;服务器端将上述所有信息放到一个报文段(即SYN+ACK报文段)中,一并发送给客户端,此时服务器进入SYN_RECV状态;
- 第三次握手:客户端收到服务器的SYN+ACK报文段。然后将Acknowledgment Number设置为y+1,向服务器发送ACK报文段,这个报文段发送完毕以后,客户端和服务器端都进入ESTABLISHED状态,完成TCP三次握手。
完成了三次握手,客户端和服务器端就可以开始传送数据。以上就是TCP三次握手的总体介绍。
图解:
