先谈一下我们生活中常见的一些计算机网络通信的概念
1.IP地址,主要是用于标识和定位设备,由32位2进制组成。一般来说我们都会把ip地址转换为点分十进制。比如说192.168.0.1.通常来说我们看的都是这种形式。而真正的存储都是二进制,但是二进制不好看,所以就设置为点分十进制。如果你在网络上干了什么事情,警察叔叔想要找你就会根据你的ip地址定位到你的具体地址。就类似于你住在 某某市某某小区一样。常见的ip地址类型有很多,在这里不做过多概述。IP的数据传输涉及到的就是数据包Packet。
2.MAC地址是一个全球唯一的地址,由网络设备的制造商分配,并用于在局域网(LAN)中唯一标识和定位网络设备。它是用于在数据链路层(如以太网)上进行通信的硬件地址。
3.可靠传输与不可靠传输。常见的两大网络传输协议分别是TCP/UDP协议。
(1)UDP传送数据报文,往往是不可靠的传输。因为会出现丢包等现象,会最大程度上保持连续性,比如说我们常看的直播就是这样的。往往我们看直播有的时候就感觉卡了,或者说上网课的时候,老师可能说说话就没声音了,这些情况下网络使用的就是UDP协议。UDP传输的是数据报 Datagram.
(2)TCP协议。TCP是一种面向连接的,可靠的传输协议,通过建立连接,数据分段,流量控制,错误检验,重传这些方式,确保了数据的可靠传输。往往文件传输(SMTP)和电子邮件(POP)传输需要的就是可靠的TCP协议。这里要声明,数据只是要尽力的传送给对方,而不是确保传送给对方!TCP协议是使用一种面向字节流的传输方式。比如说文件操作,就是字节流的方式。TCP传输的是Segment
4.UDP的socket API :DatagramSocket 和 DatagramPacket
Socket套接字编程 socket文件,就可以视为网卡这种硬件设备的抽象表现形式。而对socket文件的读与写操作,就相当于对网卡内容进行读写。DatagramPacket是针对UDP数据报的一个抽象表示。一个DatagramPacket对象就相当于一个UDP数据报。
5.编程中常用的一个术语是Echo 称为回显。回显的意思很简单,就是你请求了啥,响应就是啥
在网络编程中,客户端是我们,我们是主动的一方,我们给服务器发请求,因此服务器就是被动的一方,
以游戏为例,当你打开游戏时,客户端会向服务器发送请求,请求加入游戏或获取游戏数据等。服务器接收到请求后会进行相应的处理,并向客户端发送回应,例如确认加入游戏或发送游戏数据等。
同样地,在进行网页搜索时,你在浏览器中输入关键词并点击搜索按钮,浏览器就会向服务器发送搜索请求。服务器接收到请求后会进行搜索操作,并将搜索结果以页面的形式返回给你的浏览器展示。
6.UDP数据报包括两个部分 1)报头 2)载荷。udp socket自身不会记录对方的ip和端口号等信息。因此定义的DatagramPacket对象中会定义这些信息。
DatagramPacket requestPacket = new DatagramPacket(new byte[4096],4096);
socket.receive(requestPacket);
//中间省略很多代码
System.out.printf("[%s:%d] req: %s,resp: %s\n",requestPacket.getAddress().toString(),requestPacket.getPort(),request,response);//打印日志