udp

Nodejs网络通讯

本小妞迷上赌 提交于 2020-03-03 00:55:43
Node.js 网络通信 Node 是一个面向网络而生的平台,它具有事件驱动、无阻塞、单线程等特性,具备良好的可伸缩性,使得它十分轻量,适合在分布式网络中扮演各种各样的角色。同时 Node 提供的 API 十分贴合网络,适合用它基础的 API 构建灵活的网络服务。本课程的内容就是给大家介绍 Node 在网络通信编程方面的具体能力。 利用 Node 可以十分方便的搭建网络服务器。在 Web 领域,大多数的编程语言需要专门的 Web 服务器作为容器,如 ASP、ASP.NET 需要 IIS 作为服务器,PHP 需要打在 Apache 或 Nginx 环境等,JSP 需要 Tomcat 服务器等。但对于 Node 而言,只需要几行代码即可构建服务器,无需额外的容器。 Node 提供了 net、dgram、http、https 这4个模块,分别用于处理 TCP、UDP、HTTP、HTTPS,适用于服务器端和客户端。 网络通信相关概念 我们每天使用互联网,你是否想过,它是如何实现的? 全世界几十亿台电脑,连接在一起,两两通信。上海的某一块网卡送出信号,洛杉矶的另一块网卡居然就收到了,两者实际上根本不知道对方的物理位置,你不觉得这是很神奇的事情吗? 互联网的核心是一系列协议,总称为"互联网协议"(Internet Protocol Suite)。它们对电脑如何连接和组网,做出了详尽的规定

TCP通信粘包问题分析和解决

自古美人都是妖i 提交于 2020-03-02 19:48:32
TCP通信粘包问题分析和解决(全) 在socket网络程序中,TCP和UDP分别是面向连接和非面向连接的。因此TCP的socket编程,收发两端(客户端和服务器端)都要有成对的socket,因此,发送端为了将多个发往接收端的包,更有效的发到对方,使用了优化方法(Nagle算法),将多次间隔较小、数据量小的数据,合并成一个大的数据块,然后进行封包。这样,接收端,就难于分辨出来了,必须提供科学的拆包机制。 对于UDP,不会使用块的合并优化算法,这样,实际上目前认为,是由于UDP支持的是一对多的模式,所以接收端的skbuff(套接字缓冲区)采用了链式结构来记录每一个到达的UDP包,在每个UDP包中就有了消息头(消息来源地址,端口等信息),这样,对于接收端来说,就容易进行区分处理了。所以UDP不会出现粘包问题。 ==================================================================== 在介绍TCP之前先普及下两个相关的概念,长连接和短连接。 1.长连接 Client方与Server方先建立通讯连接,连接建立后 不断开, 然后再进行报文发送和接收。 2.短连接 Client方与Server每进行一次报文收发交易时才进行通讯连接,交易完毕后立即断开连接。此种方式常用于一点对多点通讯,比如多个Client连接一个Server.

W5500EVB UDP模式的測试与理解

断了今生、忘了曾经 提交于 2020-03-02 18:07:34
之前的博文中已经介绍过W5500EVB 在TCP模式下的两种(Server及Client)传输数据的实现过程,那么传输控制协议中,UDP也是很经常使用的。这样的无连接的协议在很多其它场合为用户提供了便捷。比方发电子邮件,QQ聊天发收消息等…好,那今天就学习一下。UDP模式在W5500EVB上的简单实现。 一 实验硬件及其连接 二 UDP实验相关知识 W5500是一款全硬件TCP/IP嵌入式以太网控制器,为嵌入式系统提供了更加简易的互联网连接方案。W5500集成了TCP/IP协议栈,10/100M以太网数据链路层(MAC)及物理层(PHY),用户无需特别关注TCP 和 UDP的实现过程。仅仅需最好对应配置和查询工作就可以。以下主要解说TCP和UDP差别。供參考 1 基于连接与无连接 TCP—传输控制协议提供的是面向连接、可靠的字节流服务。当客户和server彼此交换数据前。必须先在两方之间建立一个TCP连接,之后才干数据传输。TCP提供超时重发。丢弃反复数据,检验数据,流量控制等功能,保证数据能从一端传到还有一端。 每一个数据包的传输过程是:先建立链路、传输数据、然后清除链路。数据包不包括目的地址。受端和发端不但顺序一致,并且内容同样。它的可靠性高。 UDP—用户数据报协议是面向无连接的。每一个数据包都有完整的源、目的地址及分组编号,各自在网络中独立传输,传输中无论其顺序

TCP/UDP常见问题小结

被刻印的时光 ゝ 提交于 2020-03-02 15:18:02
1,udp丢包 困扰几天的udp内网传输部分终于做通了,解决的关键就在于setsockopt的调用,设置接收缓冲。 遇到的问题是这样的,主机端发送udp数据包: 应用层的包大小为1452byte大小,这样拆包是根据以太网的MTU为1500字节而考虑的(当然外网状态下并不一定就是以太网网络,路由MTU可能更加小),因为在网络层和传输层还有8byte的udp包头和20byte的ip包头,所以以太网帧大小为1452+8+20 = 1480byte。 主机端(linux)现在接了11路视频数据,发送的数据量还是很大的,但经过测试,数据是可以发送出去的,发送端没有问题。我在客户端用一个线程专门接包,然后进行处理,可总是处理不过来,当连接路数比较多的时候,即码流增大时,出现接收不过来的情况。开始以为是主机端问题,进行写文件测试发现主机端完全可以承受11路数据的发送(udp数据包),而接收端对每个部分都进行了详细测试,都没有效率问题而影响接包的处理,最后将目光放在了接收缓冲的问题上,经过查证,windows程序默认的udp socket的接收和发送缓冲都是8kB, 而将接收缓冲调大后,马上解决了丢包现象: int n = 512*1024; setsockopt(m_hRcvSock, SOL_SOCKET, SO_RCVBUF, (const char*)&n, sizeof(n));

Qt开发的UDP接收端

☆樱花仙子☆ 提交于 2020-03-02 07:18:07
上一篇已经说完了简单UDP发送端开发,参见我的博客:Qt开发的UDP发送端。 博文地址:https://my.oschina.net/marshal2bit/blog/803803 做完UDP发送端,我又尝试做了一个UDP接收端。先上图,做出来的样子如下: 一、开发环境(和上篇博文一样) 系统:Windows 7 专业版(64位) 软件:qt-opensource-windows-x86-mingw530-5.7.0(原来用Qt 5.2.1+完成的工程) 注:Qt下载链接http://download.qt.io/official_releases/qt/ 二、新建工程 见文章开头的博客链接。注意修改 .pro 文件 #------------------------------------------------- # # Project created by QtCreator 2016-12-03T18:32:29 # #------------------------------------------------- QT += core gui network greaterThan(QT_MAJOR_VERSION, 4): QT += widgets TARGET = udpEndpoint2 TEMPLATE = app SOURCES += main.cpp\

Qt开发的UDP发送端

喜夏-厌秋 提交于 2020-03-02 05:31:44
一、准备 (一)开发环境 系统:Windows 7 专业版(64位) 软件:qt-opensource-windows-x86-mingw530-5.7.0(原来用Qt 5.2.1+完成的工程) 注:Qt下载链接http://download.qt.io/official_releases/qt/ (二)知识准备 Qt 5入门请看书籍 《C++ Qt5 范例开发大全 》 (可通过网络搜索,也可以通过Qt交流QQ群获得)。 Qt创建工程请看百度教程: http://jingyan.baidu.com/article/7908e85c95d538af491ad274.html 网络传输协议知识,请自行脑补! 二、开发过程 (一)创建Qt 工程,命名udpEndpoint1(任何名字都可以,只要符合Qt文件命名规则) 创建没有严格按照步骤一步步来,就点一下关键的地方。 1. 选择 QWidget 基类 2. 创建完成 (二)打开 udpEndpoint1.pro ,找到代码行,就在正文第一行 QT += core gui 右边加上“ network ”,这一步非常重要,这样才能加载Qt中与网络有关的库(这是我自己的理解,不专业),不然后面程序运行会报错。修改如下: QT += core gui network 注:请注意一下.pro的内容和工程文件中头文件和源文件下的文件,后文中会用到。

Java 使用 TCP 和 UDP 传输文件

和自甴很熟 提交于 2020-02-29 13:59:14
  引言    本项目的目的是实现两个应用,通过网络连接在不同的主机之间传输一个文件的功能。两个应用应该分别利用 UDP 和 TCP 协议,以具有传输至少 1 MB 文件的能力。    实现和说明    源代码    两个应用都由单个程序实现,源代码下载地址。    说明    程序使用以下命令行进行编译:    javac *.java    然后使用以下两个命令行运行: Receiver: # java FileReceiver [protocol] [port] Sender: # java FileSender [protocol] [host] [port] [filename]   其中 [protocol] 参数可以是 "udp" 或者 "tcp",但 sender 和 receiver 必须一致。    文件将会在 receiver 启动的目录下生成,默认指定名为 "Received-[filename]"。    TCP 实现    实现概述    在 TCP 实现中,Receiver 打开了一个 ServerSocket,并对定义好的端口进行监听。Sender 启动后将会为监听者 Receiver 打开一个新的 Socket,这导致了 socket 两端 InputStream 和 OutputStream 对象的创建。   

Java Socket技术总结

随声附和 提交于 2020-02-29 08:35:40
1 Socket通信原理 1.1 ISO七层模型 1.2 TCP/IP五层模型 应用层相当于OSI中的会话层,表示层,应用层。 区别参考:http://blog.chinaunix.net/uid-22166872-id-3716751.html 1.3 TCP报文 (1)序号:Seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记。 (2)确认序号:Ack序号,占32位,只有ACK标志位为1时,确认序号字段才有效,Ack=Seq+1。 (3)标志位:共6个,即URG、ACK、PSH、RST、SYN、FIN等,具体含义如下: (A)URG:紧急指针(urgent pointer)有效。 (B)ACK:确认序号有效。 (C)PSH:接收方应该尽快将这个报文交给应用层。 (D)RST:重置连接。 (E)SYN:发起一个新连接。 (F)FIN:释放一个连接。 需要注意的是: (A)不要将确认序号Ack与标志位中的ACK搞混了。 (B)确认方Ack=发起方Req+1,两端配对。 1.4 Socket通信 Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP /IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据

Socket的半包,粘包与分包的问题

杀马特。学长 韩版系。学妹 提交于 2020-02-29 08:05:31
首先看两个概念: 短连接: 连接->传输数据->关闭连接 HTTP是无状态的,浏览器和服务器每进行一次HTTP操作,就建立一次连接,但任务结束就中断连接。 也可以这样说:短连接是指SOCKET连接后发送后接收完数据后马上断开连接。 长连接: 连接->传输数据->保持连接 -> 传输数据-> 。。。 ->关闭连接。 长连接指建立SOCKET连接后不管是否使用都保持连接,但安全性较差。 之所以出现粘包和半包现象,是因为TCP当中,只有流的概念,没有包的概念. 半包 指接受方没有接受到一个完整的包,只接受了部分,这种情况主要是由于TCP为提高传输效率,将一个包分配的足够大,导致接受方并不能一次接受完。( 在长连接和短连接中都会出现 )。 粘包与分包 指发送方发送的若干包数据到接收方接收时粘成一包,从接收缓冲区看,后一包数据的头紧接着前一包数据的尾。出现粘包现象的原因是多方面的,它既可能由发送方造成,也可能由接收方造成。发送方引起的粘包是由TCP协议本身造成的,TCP为提高传输效率,发送方往往要收集到足够多的数据后才发送一包数据。若连续几次发送的数据都很少,通常TCP会根据优化算法把这些数据合成一包后一次发送出去,这样接收方就收到了粘包数据。接收方引起的粘包是由于接收方用户进程不及时接收数据,从而导致粘包现象。这是因为接收方先把收到的数据放在系统接收缓冲区,用户进程从该缓冲区取数据

Python----网络编程----UDP

a 夏天 提交于 2020-02-28 23:48:52
Python学习之路,点击有全套Python笔记 1、什么是socket socket(简称 套接字) 是进程间通信的一种方式,它与其他进程间通信的一个主要不同是:它能实现不同主机间的进程间通信,我们网络上各种各样的服务大多都是基于Socket 来完成通信的 例如我们每天浏览网页、QQ 聊天、收发 email 等等 它是全双工 2、什么是UDP 用户数据报协议 UDP(User Datagram Protocol)是无连接的,尽最大可能交付,没有拥塞控制,面向报文(对于应用程序传下来的报文不合并也不拆分,只是添加 UDP 首部),支持一对一、一对多、多对一和多对多的交互通信。 创建模板: import socket socket . socket ( AddressFamily , Type ) Address Family:可以选择 AF_INET(用于 Internet 进程间通信) 或者 AF_UNIX(用于同一台机器进程间通信),实际工作中常用AF_INET Type:套接字类型,可以是 SOCK_STREAM(流式套接字,主要用于 TCP 协议)或者 SOCK_DGRAM(数据报套接字,主要用于 UDP 协议) 发送示例 import socket def main ( ) : # 创建tcp的套接字 udp_socket = socket . socket (