网络编程
文章平均质量分 61
Beyond_cn
这个作者很懒,什么都没留下…
展开
-
RTP 和 RTSP的区别
RTP(Real-time Transport Protocol)是用于Internet上针对多媒体数据流的一种传输协议。RTP被定义为在一对一或一对多的传输情况下工作。其目的是提供时间信息和实现流同步。但RTP通常使用UDP来传送数据。但RTP也可以在TCP或ATM等其他协议之上工作。当应用程序开始一个RTP会话时将使用两个端口:一个给RTP一个给 RTCP。RTP本身并不能为接顺序传送数据转载 2015-06-06 16:26:20 · 2791 阅读 · 0 评论 -
Jsoncpp的使用
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。 易于人阅读和编写。同时也易于机器解析和生成。 它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括转载 2014-07-28 20:01:00 · 790 阅读 · 0 评论 -
在UDP套按字上调用Connect建立连接
标准的udp客户端开了套接口后,一般使用sendto和recvfrom函数来发数据,最近看到mobilygen的代码里面是使用send函数直接法的,就分析了一下,原来udp发送数据有两种方法供大家选用的,顺便把udp的connect用法也就解释清楚了。方法一: socket----->sendto()或recvfrom() 方法二: socket----->connect()---转载 2014-07-28 20:24:46 · 727 阅读 · 0 评论 -
UDP/TCP穿越NAT的P2P通信方法研究(UDP/TCP打洞 Hole Punching)
内容概述:在p2p通信领域中,由NAT(Network Address Translation,网络地址转换)引起的问题已经众所周知了,它会导致在NAT内部的p2p客户端在无论以何种有效的公网ip都无法访问的问题。虽然目前已经发展出多种穿越NAT的技术,但相关的技术文档却很少,用来证明这些技术的稳定性和优点的实际数据更少。本文的目的在于描述和分析在实际中运用得最广泛、最可靠同时也是最简单的一种NA转载 2014-07-28 20:16:30 · 953 阅读 · 0 评论 -
字符与编码
1. 编码问题的由来,相关概念的理解1.1 字符与编码的发展从计算机对多国语言的支持角度看,大致可以分为三个阶段: 系统内码说明系统阶段一ASCII计算机刚开始只支持英语,其它语言不能够在计算机上存储和显示。英文 DOS阶段二ANSI编码(本地化)为使计算机支持更多语言,通常使用 0x80~0xFF 范围的转载 2014-07-28 19:57:56 · 916 阅读 · 0 评论 -
UDP Hole Puching技术:穿透防火墙建立UDP连接
在防火墙上钻孔【UDP Hole Puching】:穿透防火墙建立UDP连接知道现在流行的P2P软件和IM软件是如何让两台分处在不同防火墙后面的电脑直接对话的吗?SIP当然是一种,还有一种被广泛应用的就是本文介绍的UDP Hole Puching技术。 为了便于讲述,我们假设有这样一个网络拓扑结构: IP=A.A.A.A IP=1.1.1.1 HostA-------转载 2014-07-10 17:45:02 · 2053 阅读 · 0 评论 -
UDP用打洞技术穿透NAT的原理与实现
首先先介绍一些基本概念: NAT(Network Address Translators),网络地址转换:网络地址转换是在IP地址日益缺乏的情况下产生的,它的主要目的就是为了能够地址重用。NAT分为两大类,基本的NAT和NAPT(Network Address/Port Translator)。转载 2014-07-10 17:44:13 · 1158 阅读 · 0 评论 -
OpenSSL在Windows下的编译安装
解压OpenSSL以后, 在其目录下可以发现有个INSTALL.W32文件,这个文件就是在windows下的安装说明。你可以用UltraEdit打开它。1.安装perl,perl可以从http://www.activestate.com/ActivePerl下载。2.安装编译器(任意一个都可以),我仅以Visual C++为例子。 Visual C++ Bo转载 2014-03-09 15:46:16 · 1027 阅读 · 0 评论 -
使用 OpenSSL API 进行安全编程
OpenSSL API 的文档有些含糊不清。因为还没有多少关于 OpenSSL 使用的教程,所以对初学者来说,在 应用程序中使用它可能会有一些困难。那么怎样才能使用 OpenSSL 实现一个基本的安全连接呢? 本教程将帮助您解决这个问题。学习如何实现 OpenSSL 的困难部分在于其文档的不完全。不完全的 API 文档通常会妨碍开发人员 使用该 API,而这通常意味着它注定要失败。但 Op转载 2014-04-15 20:37:13 · 1112 阅读 · 0 评论 -
HUB、交换机和路由
首先说HUB,也就是 集线器 。它的作用可以简单的理解为将一些机器连接起来组成一个局域网。而 交换机 (又名交换式集线器)作用与集线器大体相同。但是两者在性能上有区别:集线器采用的是共享带宽的工作方式,而交换机是独享带宽。这样在机器很多或数据量很大时,两者将会有比较明显的。而 路由器 与以上两者有明显区别,它的作用在于连接不同的网段并且找到网络中数据传输最合适的路径 ,可以转载 2014-03-02 21:30:09 · 1022 阅读 · 0 评论 -
直接用socket实现HTTP协议(下载专用)
从HTTP服务器上下载一个文件有很多方法,“热心”的微软提供了 WinInet 类,用起来也很方便。当然,我们也可以自己实现这些功能,通过格式化请求头很容易就能实现断点续传和检查更新等等功能 。本文附带的工程中有一个支持 HTTP1.1 协议,直接用 Socket 实现下载功能的 DLL,实现了以下功能:1.连接主机2.格式化请求头3.设置接收,发送超时4.接收并分转载 2014-07-28 20:25:56 · 875 阅读 · 0 评论 -
Winsock 10053错误分析
Winsock 10053错误分析 WSAGetLastError可能会返回10053错误,查msdn的解释是:WSAECONNABORTED 10053Software caused connection abort.An established connection was aborted by the software in y转载 2014-10-23 15:24:17 · 4689 阅读 · 0 评论 -
多网卡或存在虚拟机的情况,socket广播包发送会出现问题
socket绑定时,不知绑定到那个网卡,然后发送广播包后,如果设备端只针对这个网卡的广播包进行回复,回复包收不到,造成设备找不到。现象:有时包发送到了不是连接我们设备的那个网卡,有时根本就没有发送广播包,从代码上看sendto函数的返回值是对的,但是使用wireshark就抓不到他的包!定位:windows socket 广播包时,如果要往多个网卡发送广播包,必须依次对各个网卡发送转载 2015-01-07 19:12:40 · 3627 阅读 · 0 评论 -
Qt版的Rtsp客户端
其实这个实现还是很简单的。主要是要在编译ffmpeg的时候,开启rtsp,network,这样我们就可以直接利用avformat_open_input函数接受rtsp协议了。ffmpeg代码的编写的流程和输入文件是一样的。所以说整个实现过程还是比较简单的。同样,我这里会给出我在开发这个客户端的所有的参考资料。对于别人详细介绍的知识我就不会在赘述了。 随便提一下,我一开始使用live55转载 2015-06-06 14:11:28 · 9617 阅读 · 1 评论 -
UDP打洞实验
两台没有外网 IP、在 NAT 后边的主机如何直连?UDP打洞通常可行,但是需要第三方服务器。方法如下:在服务器 S 上监听一个 UDP 端口,在收到 UDP 数据包后把源地址发回去。代码如下(github):udpaddr123456789101112转载 2015-06-06 12:00:36 · 1140 阅读 · 0 评论 -
ICMP协议之ping实现
1. 相关ICMP协议概述 这里只讲解与ping有关的ICMP消息类型,主机发送回送消息(Type = 8),被请求主机回送响应消息(Type = 0),基本格式如下: 回送消息[ECHO] 回送响应消息[ECHO REPLY] 其中•Code = 0, •CheckSum为校验和,重点注意从ICMP的头部(即Type转载 2015-03-30 20:52:02 · 998 阅读 · 0 评论 -
网络编程原始套接字SOCKET_RAW
SOCKET_STREAM 流式套接字 SOCKET_DGRAM SOCKET_RAW 原始套接字 IPPROTO_IP IP协议 IPPROTO_ICMP INTERNET控制消息协议,配合原始套接字可以实现ping的功能 IPPROTO_IGMP INTERNET 网关服务协议,在多播中用到在AF_INET地址族下转载 2015-03-30 20:44:49 · 5477 阅读 · 0 评论 -
RTSP/RTP over TCP
Normally, RTSP provide streaming over UDP. By nature, UDP is a better choice as it provides robust streaming capability for media. However, it is unlikely to use UDP for streaming over the Internet.转载 2015-03-30 20:33:31 · 786 阅读 · 0 评论 -
实时传输协议介绍:RTP协议介绍、RTCP协议介绍、RTSP协议介绍
RTP(Real Time Transport Protocol) RTP是针对Internet上多媒体数据流的一个传输协议, 由IETF(Internet工程任务组)作为RFC1889发布。RTP被定义为在一对一或一对多的传输情况下工作,其目的是提供时间信息和实现流同步。RTP的典型应用建立在UDP上,但也可以在TCP或ATM等其他协议之上工作。RTP本身只保证实时数据的转载 2015-03-30 20:37:28 · 914 阅读 · 0 评论 -
RTMP/RTP/RTSP/RTCP的区别
目录(?)[+]用一句简单的话总结:RTSP发起/终结流媒体、RTP传输流媒体数据 、RTCP对RTP进行控制,同步。之所以以前对这几个有点分不清,是因为CTC标准里没有对RTCP进行要求,因此在标准RTSP的代码中没有看到相关的部分。而在私有RTSP的代码中,有关控制、同步等,是在RTP Header中做扩展定义实现的。另外,RFC3550可以看作是RFC1889的升级文转载 2015-03-30 20:40:10 · 869 阅读 · 0 评论 -
RTP over RTSP(TCP)
服务器:live555 客户端:VLC 视频格式:H264 (1)OPTIONS OPTIONS rtsp://222.201.145.236/slamtv60.264 RTSP/1.0CSeq: 2User-Agent: LibVLC/1.1.11 (LIVE555 Streaming Media v2011.05.25)解析:此步骤是客户端向服务器转载 2015-03-30 20:36:45 · 910 阅读 · 0 评论 -
原始套接字SOCK_RAW
[+]实际上,我们常用的网络编程都是在应用层的报文的收发操作,也就是大多数程序员接触到的流式套接字(SOCK_STREAM)和数据包式套接字(SOCK_DGRAM)。而这些数据包都是由系统提供的协议栈实现,用户只需要填充应用层报文即可,由系统完成底层报文头的填充并发送。然而在某些情况下需要执行更底层的操作,比如修改报文头、避开系统协议栈等。这个时候就需要使用其他的方转载 2015-03-30 20:43:36 · 777 阅读 · 0 评论 -
通信协议之序列化TLV
通信协议可以理解两个节点之间为了协同工作实现信息交换,协商一定的规则和约定,例如规定字节序,各个字段类型,使用什么压缩算法或加密算法等。常 见的有tcp,udo,http,sip等常见协议。协议有流程规范和编码规范。流程如呼叫流程等信令流程,编码规范规定所有信令和数据如何打包/解包。编码规范就是我们通常所说的编解码,序列化。不光是用在通信工作上,在存储工作上我们也经常用到。如我们经常想把内转载 2014-03-02 20:38:15 · 6217 阅读 · 0 评论 -
TLV 格式及编解码示例
TLV是一种可变格式,意思就是:Type类型, Lenght长度,Value值;Type和Length的长度固定,一般那是2、4个字节(这里统一采用4个字节);Value的长度有Length指定;编码方法:1. 将类型type用htonl转换为网络字节顺序,指针偏移+42. 将长度length用htonl转换为网络字节顺序,指转载 2014-01-17 16:20:53 · 2283 阅读 · 0 评论 -
应用层通信协议开发浅析
1.通信协议的概念及其要素在OSI开放互联参考模型中,对等实体(peer)之间数据单元在发送方逐层封装(encapsulation),在接收方的逐层解析(decapsulation)。发送方N层实体从N+1层实体得到的数据包称为服务数据单元(Service Data Unit,SDU)。N层实体只将其视为需要本实体提供服务的数据,将服务数据单元进行封装,使其成为一个对方能够理解的数据单元(Pr转载 2014-01-17 16:25:46 · 1665 阅读 · 0 评论 -
关于SO_REUSEADDR的使用说明
参考WINDOWS 网络编程技术 1. 可以对一个端口进行多次绑定,一般这个是不支持使用的; 2. 对于监听套接字,比较特殊。如果你定义了SO_REUSEADDR,并且让两个套接字在同一个端口上进行接听,那么对于由谁来ACCEPT,就会出现歧义。如果你定义个SO_REUSEADDR,只定义一个套接字在一个端口上进行监听,如果服务器出现意外而导致没有将这个端口释放转载 2013-08-26 20:13:09 · 1033 阅读 · 0 评论 -
closesocket, shutdown, tcp::socket.close()
closesocket, shutdown, tcp::socket.close()tcp关闭连接有2种方式,一种是关闭端发送FIN,对方回应FINACK,关闭端再回ACK,这是优雅的关闭连接。双方可以保证所有数据都发送接收完成了。另一种是硬关闭,关闭方直接发送RSET。对方收到后立刻断开连接。 首先应该了解win32 api closesocket,这里只说msdn文档中叙述不够清晰转载 2012-06-27 13:57:34 · 2076 阅读 · 0 评论 -
OSI TCP/IP 模型
ISO国际标准组织所定义的开放系统互连七层模型的定义和各层功能。它是网络技术入门者的敲门砖,也是分析、评判各种网络技术的依据—从此网络不再神秘,它也是有理可依,有据可循的。 建立七层模型主要是为解决异种网络互连时所遇到的兼容性问题。它的最大优点是将服务、接口和协议这三个概念明确地区分开来;也使网络的不同功能模块分担起不同的职责。 网络发展中一个重要里程碑便是ISO(Intern转载 2013-08-17 11:47:14 · 858 阅读 · 0 评论 -
IPv4 IP 地址
随着VPN和SSH服务的公开热卖,觉得还是有必要从零开始了解下相关技术,网络上很多这类知识是胡乱转载的,故将自己的理解做下笔记,感谢党、感谢国家、感谢维基百科...TCP/IP协议(传输控制协议/网际协议)是一簇网络通信协议,是目前Internet中的核心技术。其中最有名的是TCP协议和IP协议(IPv4已接近功能上限,IPv6将逐步取代。)TCP/IP协议对OSI/ISO模型进行转载 2013-07-02 17:32:18 · 1321 阅读 · 0 评论 -
IP头、TCP头、UDP头
IP数据包也叫IP报文分组,传输在ISO网络7层结构中的网络层,它由IP报文头和IP报文用户数据组成,IP报文头的长度一般在20到60个字节之间,而一个IP分组的最大长度则不能超过65535个字节。 下图为IP分组的报文头格式,报文头的前20个字节是固定的,后面的可变。 版本:占4位(bit),指IP协议的版本号。目前的主要版本为IPV4,即第4版本号,也有一些教育网和科研机构在使用I转载 2013-06-16 20:31:42 · 840 阅读 · 0 评论 -
WinSock TCP keepalive
TCP 是面向连接的 , 在实际应用中通常都需要检测对端是否还处于连接中。如果已断开连接,主要分为以下几种情况:1.连接的对端正常关闭,即使用 closesocket 关闭连接。2.连接的对端非正常关闭,包括对端异常关闭,网络断开(待机),掉电等情况。 对于第一种情况,很好判断,但是对于第二种情况,可能会要麻烦一些。在网上找到了一些文章,大致有以下两种解决方法:1.自己编写转载 2013-06-07 15:13:39 · 927 阅读 · 0 评论 -
累积确认
累积确认这个概念应该不只适用于TCP协议,也适用其他层,比如链路层。一般地讲,如果发送方发了包1,包2,包3,包4;接受方成功收到包1,包2,包3。那么接受方可以发回一个确认包,序号为4(4表示期望下一个收到的包的序号;当然你约定好用3表示也可以),那么发送方就知道包1到包3都发送接收成功,必要时重发包4。一个确认包确认了累积到某一序号的所有包。而不是对没个序号都发确认包。具体到T转载 2012-06-11 17:55:46 · 10802 阅读 · 0 评论 -
网络中 IP数据报 传输的过程
IP数据报需从主机A上传送到主机B上,主机A首先查找路由表,判断目的主机是否与自己在同一个网段内, if在同一个网段内,则主机A查询自己的ARP表,看是否有该目的IP地址对应的MAC地址的记录, { if有,则将该MAC地址作为目的MAC地址,封装数据帧,传送给主机B, else没有,则发送一个ARP请求广播给网段内的所有主机,来查询该目的IP原创 2013-07-23 13:23:17 · 6473 阅读 · 3 评论 -
Windws 路由表
前文《网络基础技术:详解IP地址》及子网划分及子网掩码计算方法讲了 IP协议和子网掩码的一些基础知识,这一切都是为今天的路由知识准备的...一、名词理解1.1、路由表:指路由器或者其他互联网网络设备上存储的表,该表中存有到达特定网络终端的路径,在某些情况下,还有一些与这些路径相关的度量。在命令提示符下输入“route print”,显示如下图所示的本地路由表:转载 2013-07-02 17:33:26 · 1068 阅读 · 0 评论 -
setsockopt设置socket状态
1.closesocket(一般不会立即关闭而经历TIME_WAIT的过程)后想继续重用该socket:BOOL bReuseaddr=TRUE;setsockopt(s,SOL_SOCKET ,SO_REUSEADDR,(const char*)&bReuseaddr,sizeof(BOOL));2. 如果要已经处于连接状态的soket在调用closesocket后强制关闭,不经转载 2013-08-17 12:51:50 · 1036 阅读 · 0 评论 -
socket发展史
1.Soket发展史以及它和tcp/ip的关系七十年代中,美国国防部高研署(DARPA)将TCP/IP的软件提供给加利福尼亚大学Berkeley分校后,TCP/IP很快被集成到Unix中,同时出现了许多成熟的TCP/IP应用程序接口(API)。这个API称为Socket接口。今天,SOCKET接口是TCP/IP网络最为 通用的API,也是在INTERNET上进行应用开发最为通用的API。转载 2013-08-17 19:58:24 · 4470 阅读 · 0 评论 -
完成端口IOCP详解
本系列里完成端口的代码在两年前就已经写好了,但是由于许久没有写东西了,不知该如何提笔,所以这篇文档总是在酝酿之中……酝酿了两年之后,终于决定开始动笔了,但愿还不算晚….. 这篇文档我非常详细并且图文并茂的介绍了关于网络编程模型中完成端口的方方面面的信息,从API的用法到使用的步骤,从完成端口的实现机理到实际使用的注意事项,都有所涉及,并且为了让朋友们更直观的体会完成端口的用法转载 2013-07-15 20:35:06 · 30996 阅读 · 13 评论 -
setsockeopt关于LINGER的解释
在MSDN中查找setsockeopt关于LINGER的解释如下:Setting the SO_DONTLINGER option prevents blocking on member function Close while waiting for unsent data to be sent. Setting this option is equivalent to setting SO转载 2012-06-27 14:47:39 · 1995 阅读 · 0 评论 -
网络编程模型之完成例程(Completion Routine)
前 言记得写这个系列的上一篇文章的时候已经是四年前了,准确的说是四年半以前了,翻开我尘封已久的IO模型里面的“完成例程”的实现方式及示例代码。本文凝聚着笔者心血,如要转载,请指明原作者及出处,谢谢!不过代码写得不好,欢迎改进,而且没有版权,请随便散播、使用。OK, Let’s go ! Have fun! 本文配套的示例源码下载地址(在我的下载空间里)http://piggyxp转载 2013-07-15 20:31:27 · 1935 阅读 · 0 评论 -
WSAAsyncSelect自动把一个阻塞的socket转为非阻塞的,如果需要转为阻塞的
WSAAsyncSelect自动把一个阻塞的socket转为非阻塞的,如果需要转为阻塞的,那么先要调用这个函数,并且(最后一个参数long lEvent设置为0) 。然后调用ioctlsocket,或者WSAIoctl。 // MSDN:The WSAAsyncSelect function automatically sets socket s to nonblocking mode, re转载 2012-06-15 15:40:26 · 1233 阅读 · 0 评论