做管道方面的网站,king cms网站建设,如何用php做网站,深圳手机网站建设牛商网#x1f525; 引言 在互联网的广阔天地里#xff0c;TCP#xff08;Transmission Control Protocol#xff09;和UDP#xff08;User Datagram Protocol#xff09;作为传输层的两大支柱#xff0c;各自承担着不同的使命。下面这篇文章将带你从基础到进阶#xff0c;全… 引言 在互联网的广阔天地里TCPTransmission Control Protocol和UDPUser Datagram Protocol作为传输层的两大支柱各自承担着不同的使命。下面这篇文章将带你从基础到进阶全面解析它们的特点、差异及应用场景同时通过实战代码加深理解。 基础认知概览 TCP - 稳健的信使 ️
TCP一个面向连接的协议就像是互联网世界里的忠诚邮递员确保每一份数据都能安全、准确地送达目的地。
握手 TCP连接建立前会通过三次握手确保双方准备就绪。可靠性 提供数据确认、重传机制确保数据完整无缺顺序传输。流量控制 通过滑动窗口机制调节数据发送速率避免接收方过载。拥塞控制 动态调整数据发送量缓解网络拥堵。应用场景 适合文件传输、网页浏览等需要高度可靠性的场景。 UDP - 敏捷的使者 ♂️
UDP一个无连接的协议更像是一位奔跑的快递员快速但不保证包裹的最终到达状态。
快速传输 无需建立连接直接发送数据包降低延迟。轻量级 头部简单减少网络传输的开销。不保证顺序和完整性 数据可能丢失、乱序但适用于对实时性要求高的场景。多播支持 能够实现一对多的高效数据分发。应用场景 适用于视频会议、在线游戏、DNS查询等实时性优先的场景。 实战演练代码示例
TCP 服务器与客户端 示例
服务器Node.js
const net require(net);// 创建TCP服务器
const server net.createServer((socket) {// 每当有新的连接建立时这个回调函数会被执行socket代表与客户端的连接console.log(A client connected.);// 为这个socket即与单个客户端的连接添加data事件监听器socket.on(data, (data) {// 当接收到客户端发送的数据时这个事件被触发console.log(Received: ${data});// 将接收到的数据原样回传给客户端socket.write(Echo: ${data});});// 可以在这里添加更多的事件处理比如处理连接结束(end)、错误(error)等
});// 使服务器开始监听指定端口这里是3000端口
server.listen(3000, () {console.log(TCP Server listening on port 3000);// 这个回调函数在服务器开始监听后执行打印一条消息表明服务器已启动并监听指定端口
});客户端Node.js
const net require(net);// 定义服务器的IP地址和端口号
const SERVER_HOST localhost; // 如果服务器与客户端在同一台机器上可以使用localhost或127.0.0.1
const SERVER_PORT 3000; // 确保这个端口号与TCP服务器监听的端口一致// 创建一个新的TCP客户端Socket实例
const client new net.Socket();// 连接到指定的服务器和端口
client.connect(SERVER_PORT, SERVER_HOST, () {// 连接成功后的回调函数console.log(Connected to server); // 打印提示信息表明已成功连接到服务器// 定义要发送给服务器的消息const message Hello, TCP Server!;// 使用write方法将消息发送给服务器client.write(message); // 实际发送消息// 可选监听data事件以接收服务器的响应client.on(data, (data) {console.log(Received:, data.toString()); // 接收到服务器数据时打印出来// client.end(); // 可以在此处选择关闭连接根据实际应用需求决定});// 监听end事件当连接结束时触发client.on(end, () {console.log(Connection closed); // 打印提示信息表示连接已关闭});// 监听error事件处理连接或数据传输过程中的错误client.on(error, (err) {console.error(Error:, err); // 打印错误信息client.destroy(); // 遇到错误时关闭Socket释放资源});
});UDP 服务器与客户端 示例
服务器Node.js
// 导入Node.js的dgram模块用于创建UDP通信的socket
const dgram require(dgram);// 使用dgram模块创建一个UDP服务器socket指定使用IPv4协议
const server dgram.createSocket(udp4);// 为UDP服务器socket添加message事件监听器
// 当有UDP数据包从客户端发送到服务器时该事件被触发
server.on(message, (msg, rinfo) {// msg参数是接收到的数据内容rinfo是一个对象包含发送方的信息// rinfo.address是发送方的IP地址rinfo.port是发送方的端口号// 打印接收到的消息内容及发送方的地址和端口信息console.log(UDP message: ${msg} from ${rinfo.address}:${rinfo.port});
});// 让UDP服务器socket开始监听指定端口这里是4000端口
// 第二个参数是回调函数当服务器开始监听后执行
server.bind(4000, () {// 打印日志表明UDP服务器已在指定端口成功启动并开始监听console.log(UDP Server listening on port 4000);
});客户端Node.js
// 导入dgram模块这是Node.js中用于创建UDP Socket的模块
const dgram require(dgram);// 创建一个UDP客户端Socket指定使用IPv4协议
const client dgram.createSocket(udp4);// 使用客户端Socket发送消息到指定的服务器
// 参数分别是要发送的数据必须是Buffer或字符串、服务器端口号、服务器地址、回调函数处理错误
client.send(Hello, UDP Server!, 4000, localhost, (err) {// 如果发送过程中发生错误则抛出异常if (err) throw err;// 打印日志表明消息已成功发送console.log(UDP message sent);
});// 为客户端Socket添加message事件监听器用于接收服务器的响应
client.on(message, (msg, rinfo) {// 打印接收到的消息内容以及发送方的地址和端口console.log(UDP response: ${msg} from ${rinfo.address}:${rinfo.port});
});// 监听listening事件当客户端Socket准备好接收数据时触发
// 注意UDP客户端通常不直接监听此段代码更多是演示实际中UDP客户端不需监听listening事件
client.on(listening, () {// 获取客户端Socket的地址信息const address client.address();// 打印客户端的监听地址和端口尽管UDP客户端不真正“监听”此处逻辑更多是概念演示console.log(UDP Client listening on ${address.address}:${address.port});
});总结
TCP和UDP各有千秋TCP以其可靠性成为大多数需要确保数据安全传输场景的首选而UDP凭借其快速、轻量的优势在实时通信领域大放异彩。
选择合适协议的关键在于理解应用的具体需求是追求数据的准确无误还是强调速度与实时性希望这篇笔记能帮助你在未来的开发之旅中更加自信地驾驭这两种强大的工具。