网络编程(一):网络编程初识

一、为什么需要网络编程?

本地资源VS网络资源

当你在电脑上打开一个本地视频文件时,播放器直接从硬盘读取数据并解码显示。这是本地IO,数据来源于你的磁盘。

当你通过浏览器打开b站看视频时,视频文件不在你的电脑上,而是存储在某台远程服务器上。你的浏览器通过网络,将数据一点一点"下载"到本地,再边下边播。

网络编程的作用,就是让你的程序能从网络上获取数据,或者把数据提供给网络上的其他程序。

二、网络编程的基本概念

2.1发送端和接收端

在一次网络数据传输中:

发送端:数据的发送方进程,源主机

接收端:数据的接收方进程,目的主机。

这两个概念是相对的。

2.2请求和响应

在典型的客户端--服务器端模型中,一次完整的数据交互包含两次传输:

1.请求:客户端向服务器端发送数据,表明"我想要什么"

2.响应:服务器端处理完请求后,向客户端返回结果数据。

2.3通信流程

1.客户端构建请求数据,发送给服务器端

2.服务器端接收请求,解析并执行相应业务

3.服务器端将处理结果封装为响应数据,发送给客户端。

4.客户端接收响应,展示结果给用户

三、Socket套接字------网络编程的基石

3.1什么是Scoket?

Socket是操作系统提供的一组用于网络通信的编程接口。它封装了TCP/IP协议栈的细节,让我们可以通过简单的函数调用来发送和接收数据。

在Java中,java.net包提供了Socket相关的类,我们无需关心底层协议实现,直接使用即可。

3.2按传输层协议分类

Socket主要分为三大类,后续重点介绍前两种:

1.数据报套接字(Datagram Socket)------基于UDP

UDP(用户数据报协议)是无连接、不可靠的传输层协议。特点:

无连接:发送数据前不需要建立连接,直接发送。

不可靠传输:数据可能丢失、重复、乱序,且没有重传机制。

面向数据报:每次发送和接收都必须以完整的报文为单位。一次发送100字节,接收端必须一次读满100字节,不能分多次读。

有接收缓冲区,无发送缓冲区(直接发送)。

大小受限:单个数据报最大为64KB

2.流套接字(Steam Socket)------基于TCP

TCP(传输控制协议)是面向连接、可靠的传输层协议。特点:

有连接:通信前必须建立连接(三次握手),通信结束后释放连接(四次挥手)。

可靠传输:这是相对的可靠性,不是绝对不丢包、绝对不重复,而是通过一些规则让接收到的数据是无差错、不丢失、不重复、按序到达的。

有发送缓冲区和接收缓冲区,大小不限(取决于内存)

3.原始套接字(Raw Socket)

原始套接字允许用户直接操作IP层数据,可以自定义传输层协议。通常用于开发网络工具或安全分析。

四、开发中的注意事项

4.1同一主机测试

在开发阶段,可以在同一台电脑上启动两个Java进程,分别扮演客户端和服务端。此时IP地址使用回环地址(127.0.0.1),数据不会真正经过网卡,而是由操作系统内部转发,非常高效。

4.2端口被占用问题

每个端口同时只能被一个进程绑定。如果服务端尝试绑定一个已经被占用的端口,会抛出BindException。输入命令netstat -ano |findstr 端口号 即可显示占用该端口的进程PID,在任务管理器中可以根据PID找到对应进程。

4.3应用层协议的设计

TCP/UDP指负责传输字节,但接收方如何理解这些字节?这就需要通信双方约定应用层协议。

例如:我们约定请求格式为"命令+参数",用换行符分隔;响应格式为"状态码+数据",用JSON或XML序列化。

相关推荐
啊阿狸不会拉杆2 小时前
《计算机网络-自顶向下方法》5.4 ISP之间的路由选择:BGP 读书笔记
网络·计算机网络·接口隔离原则
毕竟是shy哥2 小时前
vs code连接远程服务器docker环境及配置免密登录
服务器·docker·vs code
徐小黑ACG3 小时前
nginx配置文件
linux·服务器·nginx
新时代牛马3 小时前
Linux VFS 完整篇:从path_openat、dentry/inode 到page cache 与挂载排障
linux·运维·服务器
Delite8023 小时前
摆脱实验室束缚:便携式卡尔费休微量水分检测技术与现场应用解析
大数据·网络·人工智能
ACP广源盛139246256734 小时前
M6/M5 Pro Mac mini 端侧 AI 落地@ACP#YLB3116 中端多盘存储扩展在 AI 服务中的机会与应用场景
大数据·网络·数据库·人工智能·嵌入式硬件·macos
ACP广源盛139246256734 小时前
M6/M5 Pro Mac mini 端侧 AI 新形态@ACP#GSV5800 Serdes 长距离视频传输在 AI 服务中的机会与落地场景
大数据·网络·数据库·人工智能·嵌入式硬件·macos·音视频
cloudfantasy5 小时前
docker直接二进制安装,非编译。KylinV10SP3 aarch64有效
运维·docker
我爱cope5 小时前
【计算机网络 | 传输层3:TCP 协议概述:面向连接、可靠传输到底意味着什么?】
网络·网络协议·学习·tcp/ip·计算机网络·传输层
新时代牛马5 小时前
Linux 驱动中断与定时完整篇:从 request_threaded_irq 到hrtimer 选型与排障
linux·运维·服务器