Java网络编程之IP,端口号,通信协议(UDP,TCP)
1.软件架构
①
C/S
:客户端/服务器
在用户本地需要下载安装客户端程序,在远程有一个服务器端程序。
- 优点:画面精美,用户体验好
- 缺点:用户需要下载更新
②
B/S
:浏览器/服务器
只需要一个浏览器,用户通过指定网址访问对应的服务器。
- 优点:不需要开发客户端,只需要页面+服务端,
用户不需要下载,打开浏览器就能使用- 缺点:如果应用过大,用户体验收到影响
2.网络编程三要素
IP,端口号,网络协议
。
①IP:设备在网络中的地址,是唯一的标识
全称:Internet Protocol
,是互联网协议地址,也称IP地址
是分配给上网设备的数字标签。
②端口号:应用程序在设备中唯一的标识
③协议:数据在网络传输中的规则,常见的协议有:UDP、TCP、HTTP、HTTPS、FTP
3.IP
1.IPV4
①全称:
Internet Protocol version 4
,互联网通信协议第四版
采用32位
地址长度,分成4组
使用点分十进制
表示
②IPV4的
地址分类形式
:
公网地址
(万维网使用)和私有地址
(局域网使用)。- 192.168.开头的就是私有址址,范围即为192.168.0.0–192.168.255.255,专门为组织机构内部使用,以此节省IP
③特殊ip地址:
本地回环地址
:127.0.0.1
或者localhost,表示本机ip。
④Windows的CMD命令:
ipconfig
:查看本机IP地址
ping
:检查网络是否连通
2.IPV6
全称:
Internet Protocolversion 6
,互联网通信协议第六版
由于互联网的蓬勃发展,IP地址的需求量愈来愈大,而IPV4的模式下IP的总数是有限的
采用128位
地址长度,分成8组。
使用冒分十六进制
表示,特殊情况使用0位压缩表示
法。
//获取InetAddress的对象
InetAddress address = InetAddress.getByName("127.0.0.1");
4.端口号
应用程序在设备中唯一的标识。
端口号:由两个字节
表示的整数,取值范围:0~65535
其中0~1023之间的端口号用于一些知名的网络服务或者应用
我们自己使用1024以上的端口号就可以了
注:一个端口号只能被一个应用程序使用。
5.协议
计算机网络中,连接和通信的规则被称为网络通信协议
OSI参考模型
:世界互联协议标准,全球通信规范,单模型过于理想化,未能在因特网上进行广泛推广。TCP/IP参考模型
(或TCP/IP协议): 事实上的国际标准。
1.UDP协议
- 用户数据报协议(User Datagram Protocol)
- UDP是
面向无连接
通信协议。
速度快
,有大小限制一次最多发送64K,数据不安全
,易丢失数据.
UDP协议发送数据:
public class Send{
public static void main(String[] args) throws IOException {
//创建DatagramSocket对象
DatagramSocket ds = new DatagramSocket();
//打包数据
String str = "你好!!";
byte[] bytes = str.getBytes();
InetAddress address = InetAddress.getByName("127.0.0.1");
int port = 10006;
DatagramPacket dp = new DatagramPacket(bytes, bytes.length, address, port);
//发送数据
ds.send(dp);
//释放资源
ds.close();
}
}
UDP协议接收数据:
public class Receive{
public static void main(String[] args) throws IOException {
//创建DatagramSocket对象:接收时绑定的端口号要与发送时的端口保持一致
DatagramSocket ds = new DatagramSocket(10086);
//接收数据包
byte[] bytes = new byte[1024];
DatagramPacket dp = new DatagramPacket(bytes, bytes.length);
ds.receive(dp);
//解析数据包
byte[] data = dp.getData();
int length = dp.getLength();
InetAddress address = dp.getAddress();
int port = dp.getPort();
System.out.println("接收到数据:" + new String(data, 0, length));
System.out.println("该数据是从" + address + "这台电脑中的" + port + "这个端口号发出的");
//释放资源
ds.close();
}
}
UDP的三种通信方式:
单播,组播,广播
1.单播
单播是一种UDP通信的方式,其中一台发送方的计算机向一台接收方的计算机发送数据包。
在单播通信中,发送方和接收方之间是一对一的关系
,数据包只会发送到指定的接收方。
单播通信适用于点对点通信或单个目标的广播通信。
2.组播
组播是一种UDP通信的方式,其中
一台发送方的计算机可以同时向多个接收方
的计算机发送数据包。
在组播通信中,发送方将数据包发送到一个特定的组播IP地址,而不是单独的目标IP地址。
所有加入该组播组的接收方都可以接收到发送方发送的数据包。
组播通信适用于需要同时向多个接收方传输相同数据的场景,如视频会议、多媒体广播等。
使用组播可以有效地减少网络带宽的消耗和系统负载
。
组播地址:224.0.0.0 ~ 239.255.255.255
其中224.0.0.0 ~ 224.0.0.255
为预留的组播地址
3.广播
在UDP通信中,广播是一种发送方向局域网中的
所有计算机发送数据包
的方式。
发送方将数据包发送到广播IP地址,该IP地址被定义为特定的网络地址(255.255.255.255
),表示发送给整个局域网内的所有计算机。
使用广播通信,发送方可以将数据包一次性发送给所有计算机,而无需指定单独的目标IP地址。
所有接收方都可以接收到发送方发送的数据包。
广播通信通常用于向局域网内的所有设备广播信息,例如在局域网内发现其他设备或进行网络设备配置。
2.TCP协议
- 传输控制协议TCP(Transmission Control Protocol)
- TCP协议是
面向连接
的通信协议。
速度慢
,没有大小限制,数据安全
。
TCP通信协议是一种可靠的网络协议,它在通信的两端各建立一个Socket对象
通信之前要保证连接已经建立
通过Socket产生IO流来进行网络通信
客户端发送数据:
public class Client {
public static void main(String[] args) throws IOException {
//发送数据
//创建Socket对象
Socket socket = new Socket("127.0.0.1", 10001);
//从连接通道中获取输出流
OutputStream os = socket.getOutputStream();
//写出数据
os.write("你好".getBytes());
//释放资源
os.close();
socket.close();
}
}
服务器接收数据:
public class Server {
public static void main(String[] args) throws IOException {
//接收数据
//
ServerSocket ss = new ServerSocket(10001);
//监听用户的连接
Socket socket = ss.accept();
//从连接通道中获取输入流数据
InputStream is = socket.getInputStream();
//解决中文乱码
InputStreamReader isr = new InputStreamReader(is);
//使用缓冲流提高读取效率
BufferedReader br = new BufferedReader(isr);
int b;
while ((b = br.read()) != -1) {
System.out.println((char) b);
}
//释放资源
socket.close();
ss.close();
}
}
1.三次握手
确保连接建立:
①客户端向服务器发出连接请求
,等待服务器确认。
②服务器向客户端返回一个响应
,告诉客户端收到了请求。
③客户端向服务器再次发出确认
信息,连接建立。
2.四次挥手
确保连接断开,且数据处理完毕:
①客户端向服务器发出取消连接请求
②服务器向客户端返回一个响应,表示收到客户端取消请求
③服务器将最后的数据处理完毕,服务器向客户端发出确认取消信息
④客户端再次发送确认
消息,连接取消
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!