TCP/UDP 之 webSocket

websocket编程——模拟tcp底层原理-java代码实现 首先对于TCP通信来说,每个TCP内核都包括两个部分,一个是接收缓冲区,另一个是发送缓冲区。 通过java代码模拟实现, 服务端代码: package cn.com.sjzc.edu.RMI.socketdemo; import java.io.*; import java.net.ServerSocket; import java.net.Socket; public class... 阅读详情

1. TCP协议:控制传输协议

特点:面向有链接,所有问题都要建立连接,数据安全,完整,三次握手后建立连接后才可以数据传输

TCP协议传输的客户端

package ClientAndServer_TCP;

import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.util.Scanner;

public class Client {
    public static void main(String[] args)  throws  Exception{

        /*
        服务器端ip地址
        自动建立连接
        三次握手
        input和output流
         */
        while (true) {
            Socket client = new Socket("127.0.0.1",12345);
            System.out.println("输入要发送的内容:");
            Scanner sc = new Scanner(System.in);
            // 输出流,客户端对于服务器是输出流
            String msg = sc.nextLine();
            OutputStream outputStream = client.getOutputStream();

            outputStream.write(msg.getBytes());

            System.out.println("发送ok!!!");
            //读取服务器返回来的反馈
            InputStream inputStream = client.getInputStream();
            byte[] bs = new byte[1024];
            int len = inputStream.read(bs);
            System.out.println("服务器响应:"+ new String(bs,0,len));


            System.out.println("==============================");
        }
    }
}

TCP协议传输的服务器端

package ClientAndServer_TCP;

import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * TCP服务器
 * author lp
 */

public class Server {
    public static void main(String[] args) throws Exception {
        ServerSocket serverSocket = new ServerSocket(12345);
        //获取哪一个客户端连接的我  也具有等待功能
        while (true) {
            System.out.println("等待接受数据...");

            Socket client = serverSocket.accept();

            String ip = client.getInetAddress().getHostAddress();


            //获取输入流,相对于客户端为输出流
            InputStream inputStream = client.getInputStream();

            byte[] bs = new byte[1024];
            int len = inputStream.read(bs);
            System.out.println("客户端地址" + ip);

            System.out.println("客户端说:" + new String(bs, 0, len));
            //向客户端回写收到了数据
            OutputStream outputStream = client.getOutputStream();
            outputStream.write("消息已收到".getBytes());
            System.out.println("****************************************");

            //serverSocket.close();
            //client.close();
        }
    }
}

结果:

客户端在这里插入图片描述
服务器端:
在这里插入图片描述
客户端回车发送后:
在这里插入图片描述
服务器收到消息:
在这里插入图片描述

2. UDP协议:用户数据报协议

特点 : 面向无连接,数据不安全,不管对方开不开机,存不存在

数据的发送和接受器

  • DategramSocket

数据包类(存数据)

  • DategramPacket

发送端:

package manyMessageSocket;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.util.Scanner;

public class UDPSender {
        public static void main(String[] args)  throws Exception{
            //接受和发送器(发送器)
            DatagramSocket ds =  new DatagramSocket();
            while (true) {
                Scanner sc = new Scanner(System.in);
                System.out.println("输入要发送的内容");
                String sendMsg = sc.nextLine();
                //byte[] bs = sendMsg.getBytes();
                //封装 数据包 类
                DatagramPacket dp = new DatagramPacket(sendMsg.getBytes(), sendMsg.length(), InetAddress.getByName("127.0.0.1"), 12345);
               ds.send(dp);
                System.out.println("数据发送ok");
            }
    }
}

接收端:

package manyMessageSocket;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

public class UDPRevicer {
    public static void main(String[] args)  throws Exception{

        //接收端必须有一个接收的端口号(接收器)
        DatagramSocket ds =  new DatagramSocket(12345);
        while (true) {
            byte[] bs = new byte[1024];
            DatagramPacket dp = new DatagramPacket(bs, bs.length);
            System.out.println("等待接受数据....");
            ds.receive(dp);
            System.out.println("接受ok");
            //获取发送端的地址
            InetAddress sendAdd = dp.getAddress();
            System.out.println("发送端地址" + sendAdd.getHostAddress());
            //获取发送端的数据
            byte[] data = dp.getData();
            //获取发送端数据的长度
            int len = dp.getLength();
            String reciveMsg = new String(data,0,len);
            System.out.println("接收到的内容:" + reciveMsg);
           System.out.println("==================================================================================");
        }
    }
}

结果:(哪位大佬解释一下udp传输消息时候为什么会有乱码)

发送端
在这里插入图片描述
接收端:
在这里插入图片描述

网络通信全景图:TCP、UDP、HTTP/HTTPS、WebSocket 与 gRPC 的底层逻辑与应用差异 本文全面解析了五大核心通信协议(TCP、UDP、HTTP/HTTPS、WebSocket、gRPC)的技术原理与应用场景。TCP提供可靠传输但开销大,UDP轻量适合实时应用,HTTP/HTTPS是Web基础协议,WebSocket实现双向通信,gRPC则专为高性能微服务设计。文章通过对比表格清晰展示各协议特性,并给出选型建议:HTTP/HTTPS适合通用Web服务,WebSocket适用于实时场景,gRPC是微服务首选,UDP适合视频传输等低延迟需求。最后指出HTTP/3等新兴技术趋势,强调掌握协议是工程师 阅读详情

相关推荐

TCP_网络编程(三) tcp如何实现websocket协议

tcp如何实现websocket协议websocket使用场景流程如何验证合法性 websocket 使用场景 当server主动给client发送数据时。 思考:reactor+websocket如何封装? 流程 server发给client数据的前提是:确保client与server已连接。 连接后,client会发送握手数据给server来验证合法性。 所以websocket中的数据是两类: 1、握手数据 2、握手后双方发送的通信数据。 如何验证合法性 ...

qq_34130311的博客 1391

websocket基于java实现

随着互联网的发展,传统的HTTP协议已经很难满足Web应用日益复杂的需求了。近年来,随着HTML5的诞生,WebSocket协议被提出,。我们知道,传统的HTTP协议是无状态的,每次请求(request)都要由客户端(如 浏览器)主动发起,服务端进行处理后返回response结果,而;这种客户端是主动方,服务端是被动方的传统Web模式 对于信息变化不频繁的Web应用来说造成的麻烦较小,而对于涉及实时信息的Web应用却带来了很大的不便,如带有即时通信、实时数据、订阅推送等功能的应 用。。

weixin_37750248的博客 3390

OpenResty中WebSocket与TCP/UDP服务开发实践

本文主要介绍了OpenResty环境下开发WebSocket和TCP/UDP服务的方法和实践。通过章节内容的深入解读,展示了如何利用OpenResty提供的库和模块,以及Lua脚本语言来构建实时和通用的网络应用。同时,文章还对WebSocket与HTTP协议的关系、TCP/UDP服务的配置指令和运行机制进行了阐释。

weixin_35754676的博客 651

4 TCP与UDP与WebSocket

TCP与UDP与WebSocket。

行走的皮卡丘 4875

使用mmdetection快速复现计算机视觉顶会论文

使用mmdetection中支持的算法运行自定义数据集

m0_56896669的博客 2422

保姆级教程:用中移ML307模组对接高德/OneOS定位服务,从配置apikey到解析+MLBSLOC状态码

本文详细介绍了如何使用中移ML307系列模组对接高德/OneOS定位服务,从配置apikey到解析+MLBSLOC状态码的全过程。涵盖高德定位服务和OneOS定位服务的配置步骤、常见错误处理及性能优化技巧,帮助开发者快速实现基站定位功能,提升物联网项目的定位精度和稳定性。

weixin_30632089的博客 507

TCP客户端模拟链接websocket服务端

客户端接收到服务端发送的新的Sec-WebSocket-Accept参数后,使用原来的随机密钥和新的Sec-WebSocket-Accept参数共同生成一个新的Sec-WebSocket-Key参数,用于加密数据传输。用了ssl加密和没用ssl加密的获取的消息也是不一样的,如果用了ssl加密后就要用sslStream来接收消息或者发送消息否则会乱码。客户端将新的Sec-WebSocket-Key参数发送给服务端,服务端接收到后,使用该参数加密数据传输,收到此消息后是代表已经和websocket建立了联系。

qq_35319925的博客 983

Xiaojie雷达之路---毫米波雷达基础知识---角度估计

本篇文章主要介绍毫米波雷达的基础知识中的角度估计,对于本篇文章主要回答5个问题 1.在雷达的前方,如何估计前方一个物体的角度 2.角度测量的准确性 3.如何测量多个物体的角度 4.雷达可测的角度的视场最大值为多少 5.角度分辨率取决于什么因素 文章目录估计雷达前面一个物体的角度角度测量的准确性雷达的最大角视场测量雷达前方多个距离和速度相同的物体角度分辨率角度估计的流程 估计雷达前面一个物体的角度 估计一个物体的角度,最少需要两根接收天线 发射天线发送一个chirp,经过物体发射后信号,信号分别被第一根天

XiaoJie的博客 1万+

网络:TCP/UDP;HTTP/HTTPS;Socket,WebSocket;UnityWebRequest

HTTP/HTTPS 与 TCP/UDP 是计算机网络中,它们共同协作以实现互联网通信。

无 839

AD(AltiumDesigner)封装导入allegro生成allegro封装

AD(AltiumDesigner)封装导入allegro生成allegro封装 貌似PCB的封装问题是一个无尽话题,为了简单我总是想找捷径(主要还是太懒了),因为也是近期才开始学习使用allegro进行PCB设计,在最近的一个设计中,很多器件封装allegro中都没有,一个一个画感觉很费时间,但是在AD(AltiumDesigner)的封装库中是有的,于是便想着AD的封装库能不能倒入到alleg...

yangh2560的博客 2万+

UFS 功能描述:UFS boot

UFS 启动过程介绍:启动配置,启动代码下载过程和安全性

m0_51720747的博客 1601

常见通信协议详解:TCP、UDP、HTTP/HTTPS、WebSocket 与 RPC

本文介绍了五种常见的网络通信协议:TCP(面向连接、可靠传输,适用于HTTP、RPC等场景)、UDP(无连接、低延迟,适合音视频传输和在线游戏)、HTTP/HTTPS(应用层协议,HTTPS提供加密安全)、WebSocket(全双工实时通信,用于聊天和推送系统)以及RPC框架(如gRPC/Dubbo,实现跨网络透明调用)。通过分析各协议的工作原理、特点和应用场景,帮助开发者根据不同业务需求(可靠性、实时性、安全性等)选择合适的技术方案,为构建高性能系统提供参考。

m0_73884648的博客 2950

Git救援:如何从误操作中恢复未提交的更改

摘要:本文探讨了误操作git reset --hard导致未提交更改丢失后的恢复方法。首先分析git reflog的局限性,随后介绍利用IDE本地历史记录(如IntelliJ IDEA和VS Code)进行文件恢复的具体步骤。最后建议使用文件系统恢复工具(如Linux的extundelete或Windows的Recuva)作为备选方案。文章强调定期提交的重要性,同时提供了意外发生时可行的恢复策略,帮助开发者尽可能挽回丢失的工作内容。(149字)

2501_90323865的博客 129

常见通信协议详解:TCP、UDP、HTTP/HTTPS、WebSocket 与 GRPC

本文将详细介绍五种常见的通信协议:​TCP、UDP、HTTP/HTTPS、WebSocket 以及 RPC(如 gRPC、Dubbo)​,从基本概念、工作原理、优缺点到典型应用场景,帮助你全面掌握这些协议的核心知识。理解这些协议的特点与适用场景,是构建高性能、高可用、可扩展系统的基础。TCP 是一种面向连接的、可靠的、基于字节流的传输层协议。UDP 是一种无连接的、不可靠的、基于数据报的传输层协议。​TCP​ 传输层协议 高 面向连接 传输层 可靠、有序、基于字节流 HTTP、RPC、数据库。

m0_37843156的博客 4152

影像技术实战02:FFmpeg 镜头切分误检、漏检问题排查与基于场景变化的稳定分镜方案

本文介绍了基于FFmpeg的镜头切分技术在实际应用中的常见问题及解决方案。文章首先指出单纯使用select='gt(scene,0.4)'命令进行镜头检测存在误检、漏检等问题,包括黑场、字幕变化被误判为镜头切换,以及相似场景切换被漏检等情况。随后提出了一套四层架构的稳定解决方案:1)用FFmpeg提取候选镜头变化点;2)解析变化点时间和分数;3)通过后处理过滤异常点;4)按时间点切割视频片段并生成报告。文中详细展示了Python实现代码,包括场景点检测、时间间隔过滤等功能模块,为视频剪辑、影视解说等场景提供

ai技术增长的博客 400

性能优化-高通cDSP(QDSP6)架构详解

高通cDSP开发的商业价值30秒快速认识高通cDSP开发的商业价值【高通cDSP旨在处理一些简单但需要大量计算的场景,如图像处理、科学计算、AI训练、计算机视觉等。这些场景使用CPU来运算会极大的降低CPU的吞吐量,因此利用现代寄存器较宽的特性设计出了适配数据并行的DSP芯片,cDSP就是典型的代表。利用cDSP+CPU既可以满足一般的使用场景,也可以完成现代图像和视频数据的处理。

发狂的小花的博客 5944

网络协议中HTTP,TCP,UDP,Socket,WebSocket的优缺点/区别

先说一下网络的层级:由下往上分为 物理层、数据链路层、网络层、传输层、会话层、表示层和应用层 1、TCP和UDP TCP:是面向连接的一种传输控制协议。属于传输层协议。TCP连接之后,客户端和服务器可以互相发送和接收消息,在客户端或者服务器没有主动断开之前,连接一直存在属于长连接。 优点:安全、传输数据无大小限制、准确可靠,先发先至 缺点:效率低,不能做离线任务、连接有耗时 UDP:是面向非连接的用户数据报协议。属于传输层协议。所谓的无连接就是在传输数据之前不需要交换信息,没有握手建立连接.

办公研究所 1282

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Go语言网络编程:ultimate-go中的WebSocket、TCP/UDP通信实现

在网络应用开发中,Go语言以其高效的并发模型和丰富的标准库成为开发者的理想选择。ultimate-go项目提供了全面的Go语言网络编程实践,涵盖WebSocket实时通信、TCP可靠传输和UDP数据报协议等核心技术,帮助开发者快速构建高性能网络应用。 ## 网络通信协议概览 计算机网络通信基于OSI七层模型,不同协议在不同层次提供特定功能。Go语言标准库的`net`包实现了TCP/IP协议族的

gitblog_00136的博客 334

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Go语言精进之路网络编程深度解析:TCP/UDP、HTTP/2与WebSocket

Go语言凭借其卓越的并发模型和简洁的语法,在网络编程领域展现出强大实力。本文将深入探讨Go语言在网络编程中的核心应用,包括TCP/UDP基础通信、HTTP/2协议实现以及WebSocket实时通信技术。无论你是Go语言新手还是有一定经验的开发者,这篇完整指南都将帮助你掌握Go网络编程的精髓。😊 ## Go语言网络编程基础概述 Go语言的网络编程能力源于其标准库的完善设计。`net`包提供了丰

gitblog_00021的博客 374

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

C语言网络编程:Socket、TCP/UDP与HTTP/WebSocket实战

网络编程是现代软件开发的核心技能之一,其基础在于理解Socket通信机制。Socket作为网络通信的端点,通过IP地址和端口号唯一标识,支持TCP/UDP等传输层协议。TCP通过三次握手建立可靠连接,采用流式传输但存在粘包问题;UDP则提供无连接的轻量级传输,适合实时性要求高的场景。在应用层,HTTP协议构建于TCP之上,而WebSocket则在HTTP握手后升级为全双工通信。掌握这些协议特性及C语言实现方式,能够开发出高性能的网络应用,如服务器程序、实时通信系统等。本文通过代码示例详解TCP粘包处理、UD

weixin_30899023的博客 354

​Socket /UDP /TCP /Websocket /HTTP区别和联系

UDP:轻量、高效,适合实时性要求高的场景。TCP:可靠、稳定,适合数据完整性要求高的场景。WebSocket:基于 TCP 的长连接,适合实时双向通信(如 Web 应用)。Socket:通用编程接口,可基于 UDP 或 TCP 实现网络通信。

unicornnnqz的博客 962

Nidium网络编程实战:WebSocket、HTTP、TCP/UDP Socket全面解析

Nidium是一个功能强大的跨平台渲染引擎,专为创建高性能应用和游戏而设计。它不仅提供了图形渲染能力,还内置了全面的网络编程接口,包括WebSocket、HTTP客户端/服务器以及TCP/UDP Socket通信。本文将深入探讨Nidium网络编程的核心功能,帮助开发者快速掌握各种网络通信技术的实战应用。 ## Nidium网络编程概览 🚀 Nidium采用自研的高性能网络库[libapen

gitblog_00151的博客 1068

tcp和ajax,TCP/UDP http ajax websocket 的区别关系以及使用场景

TCP/UDP http websocket ajax 的区别关系以及使用场景TCP/IP协议栈主要分为四层:应用层、传输层、网络层、数据链路层floor.jpgIP:即 网络层协议;(高速公路)TCP:即 传输层协议;(卡车)使用场景:TCP一般用于文件传输(FTP HTTP 对数据准确性要求高,速度可以相对慢),发送或接收邮件(POP IMAP SMTP 对数据准确性要求高,非紧急应用),远程...

weixin_39848970的博客 1177

Moon网络编程完全指南:TCP/UDP/WebSocket/HTTP多协议支持

Moon是一款基于Actor模型的轻量级游戏服务器框架,提供了全面的网络编程解决方案,支持TCP、UDP、WebSocket和HTTP等多种协议。本文将详细介绍如何利用Moon框架快速构建高效稳定的网络服务,帮助开发者轻松应对游戏开发中的各种网络通信需求。 ## 一、Moon框架网络架构概述 Moon框架采用多线程架构设计,每个Worker进程包含独立的事件循环和服务组件,通过消息队列实现线程

gitblog_00426的博客 509

端口解密:TCP/UDP/HTTP/WebSocket同一端口!

HTTP本质上还是TCP,只是比TCP数据内容多了一种标识,如:GET、POST等,来区分,而WebSocket是HTTP 握手升级,升级后,同一 TCP 连接传输的是 ‌。物理层(比特流)→数据链路层(帧)→网络层(IP包)→传输层(TCP段)→应用层(解析HTTP/WS数据)‌,端口完美实现了“一个IP地址承载多种网络服务”的能力,是网络通信实现多任务并发的基础。‌(含操作码、掩码等),之后脱离,都是复用TCP端口;‌,各自维护端口映射表,所以互不影响;综上所述,可以使用同一端口;

2301_76830515的博客 511

第7天:网络进阶——TCP/UDP、WebSocket、长连接

本文总结了网络传输层协议的核心知识点:1)TCP与UDP的对比,TCP可靠但开销大,UDP快速但不可靠;2)TCP连接管理的三次握手(防止失效请求)和四次挥手过程;3)HTTP与WebSocket的区别,后者支持全双工实时通信;4)WebSocket通过HTTP协议升级建立;5)长短连接的差异,HTTP keep-alive实现长连接复用。这些概念涵盖了传输层协议、连接管理及实时通信的关键技术要点。

2401_87960467的博客 525
上一篇: 内部类
下一篇: Docker
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值