
Socket学习
文章平均质量分 61
陈纪建
关注行业动态,找出最适合自己的发展道路
展开
-
PTP(Precision Time Protocol)高精度时间同步协议+CS模式测试代码
Precision Time Protocol (PTP)一、什么是PTPPTP 是一种高精度时间同步协议,可以到达亚微秒级精度,有资料说可达到30纳秒左右的偏差精度,但需要网络的节点(交换机)支持PTP协议,才能实现纳秒量级的同步。一般在实际使用中,现有的NTP可以达到5ms以内的精度,对一般的应用都是满足的;非超高精度设备,不建议使用PTP设备。与NTP主要区别:PTP是在硬件级实现的,NTP是在应用层级别实现的.PTP 是主从同步系统,一般采用硬件时间戳,并配合一些对NTP更高精度的延时转载 2021-08-05 09:34:44 · 4817 阅读 · 2 评论 -
关于网络字节序和主机字节序
什么是字节序?是指整数在内存中保存的顺序。 字节序有两种: a.Little endinan 低位存储在内存的低地址,高位存储在内存的高地址; b.Big endian 高位存储在内存的低地址,低位存储在内存的高地址; 举个简单的例子:DWORD dwCount = 0x01020304;这样的一个双字节变量在内存中如下分布转载 2017-03-12 11:30:50 · 349 阅读 · 0 评论 -
TCP 11种状态
注:主动、被动 与 服务器、客户端没有明确的对应关系。这个图N多人都知道,它排除和定位网络或系统故障时大有帮助,但是怎样牢牢地将这张图刻在脑中呢?那么你就一定要对这张图的每一个状态,及转换的过程有深刻 的认识,不能只停留在一知半解之中。下面对这张图的11种状态详细解析一下,以便加强记忆!不过在这之前,先回顾一下TCP建立连接的三次握手过程,以及 关闭连接的四次握手过程。1、建立连接转载 2017-04-04 08:54:09 · 508 阅读 · 0 评论 -
网络IO之阻塞、非阻塞、同步、异步总结
1、前言 在网络编程中,阻塞、非阻塞、同步、异步经常被提到。unix网络编程第一卷第六章专门讨论五种不同的IO模型,Stevens讲的非常详细,我记得去年看第一遍时候,似懂非懂,没有深入理解。网上有详细的分析:http://blog.youkuaiyun.com/historyasamirror/article/details/5778378。我结合网上博客和书总结一下,加以区别,加深理解。转载 2017-04-04 15:41:36 · 279 阅读 · 0 评论 -
setsockopt用法大全
1.closesocket(一般不会立即关闭而经历TIME_WAIT的过程)后想继续重用该socket:BOOL bReuseaddr=TRUE;setsockopt(s,SOL_SOCKET ,SO_REUSEADDR,(const char*)&bReuseaddr,sizeof(BOOL));2. 如果要已经处于连接状态的soket在调用closesocket后强制关闭,原创 2017-05-04 10:53:33 · 2987 阅读 · 0 评论 -
socket IP地址转换函数
IP地址转换函数这些天一直在看《UNP》,觉得有必要对一些东西做一下总结(其实只是抄一抄书),加深一下印象。IP地址转换函数有两组,它们可以在字符串和网络字节序的二进制值之间转换IP地址适用于IPv4地址的函数 1 #include 2 3 /* Convert Internet host address from numbers-and-do转载 2017-05-07 19:14:56 · 4568 阅读 · 0 评论 -
linux下epoll如何实现高效处理百万句柄的
开发高性能网络程序时,windows开发者们言必称iocp,Linux开发者们则言必称epoll。大家都明白epoll是一种IO多路复用技术,可以非常高效的处理数以百万计的socket句柄,比起以前的select和poll效率高大发了。我们用起epoll来都感觉挺爽,确实快,那么,它到底为什么可以高速处理这么多并发连接呢?先简单回顾下如何使用C库封装的3个epoll系统调用吧。转载 2017-06-16 11:12:28 · 284 阅读 · 0 评论 -
p2p实现原理及打洞技术介绍
什么是打洞,为什么要打洞由于Internet的快速发展 IPV4地址不够用,不能每个主机分到一个公网IP 所以使用NAT地址转换。下面是我在网上找到的一副图一般来说都是由私网内主机(例如上图中“电脑A-01”)主动发起连接,数据包经过NAT地址转换后送给公网上的服务器(例如上图中的“Server”),连接建立以后可双向传送数据,NAT设备允许私网内主机主动向公网内主转载 2018-01-05 09:58:02 · 6129 阅读 · 2 评论 -
NAT的四种类型及类型检测
考 虑到UDP的无状态特性,目前针对其的NAT实现大致可分为Full Cone、Restricted Cone、Port Restricted Cone和Symmetric NAT四种。值得指出的是,对于TCP协议而言,一般来说,目前NAT中针对TCP的实现基本上是一致的,其间并不存在太大差异,这是因为TCP协议本身 便是面向连接的,因此无需考虑网络连接无状态所带来复杂性。用语定义1.原创 2018-01-05 10:29:21 · 6301 阅读 · 0 评论 -
NAT工作方式
NAT英文全称是“Network Address Translation”,中文意思是“网络地址转换”,它是一个IETF(Internet Engineering Task Force, Internet工程任务组)标准,允许一个整体机构以一个公用IP(Internet Protocol)地址出现在Internet上。顾名思义,它是一种把内部私有网络地址(IP地址)翻译成合法网络IP地址的技术。如原创 2018-01-05 10:35:33 · 4969 阅读 · 0 评论 -
组播地址的划分
224.0.0.0 到 224.0.0.255 地址范围被 IANA 预留,地址 224.0.0.0 保留不做分配,其它地址供路由协议及拓扑查找和维护协议使用。该范围内的地址属于局部范畴,不论生存时间字段(TTL)值是多少,都不会被路由器转发; 224.0.1.0 到 238.255.255.255 地址范围作为用户组播地址,在全网范围内有效。其中233/8 为 GLOP 地址。GLOP原创 2018-01-16 11:35:03 · 20470 阅读 · 0 评论 -
什么是广播、组播、单播、多播、公播、直播
“单播”(Unicast)、“多播”(Multicast)和“广播”(Broadcast)这三个术语都是用来描述网络节点之间通讯方式的术语。那么这些术语究竟是什么意思?区别何在?且听下文分解。——★单 播★——网络节点之间的通信就好像是人们之间的对话一样。如果一个人对另外一个人说话,那么用网络技术的术语来描述就是“单播”,此时信息的接收和传递只在两个节点之间进行,参见图1。单播在网原创 2018-01-16 12:11:43 · 11127 阅读 · 0 评论 -
setsockopt函数功能及参数详解
Socket描述符选项[SOL_SOCKET]#include <sys/socket.h>int setsockopt( int socket, int level, int option_name,const void *option_value, size_t ,ption_len); 第一个参数socket是套接字描述符。第二个参数level是被设置的选项的级别,...转载 2019-06-01 10:55:12 · 31534 阅读 · 7 评论 -
TCP 滑动窗口(发送窗口和接收窗口)
TCP协议作为一个可靠的面向流的传输协议,其可靠性和流量控制由滑动窗口协议保证,而拥塞控制则由控制窗口结合一系列的控制算法实现。一、滑动窗口协议 关于这部分自己不晓得怎么叙述才好,因为理解的部分更多,下面就用自己的理解来介绍下TCP的精髓:滑动窗口协议。 所谓滑动窗口协议,自己理解有两点:1. “窗口”对应的是一段可以被发送者发送的字节序列,其连续的范围称之为“窗口”;转载 2017-03-12 11:14:53 · 34107 阅读 · 4 评论 -
Socket为解决粘包设计的环形缓冲区
前段时间实现了一个小型的C/S架构的多人在线即时通信工具,JIGQQ。其中对使用TCP通信有点心得。 记得在我大学时代,就用VB做过TCP的通信。当然那时候是很初级的,发送的数据量也很小的应用。当时就觉得,有时候发送的数据接收端不能接收到,有时候呢觉得一次性没有接受完毕。前段时间实现了一个小型的C/S架构的多人在线即时通信工具,JIGQQ。其中对使用TCP通信有点心得。记得在我大学时代,就转载 2017-02-03 11:54:52 · 2997 阅读 · 0 评论 -
Socket基本原理
一、Socket简介1、套接字(socket)概念套接字(socket)是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元。它是网络通信过程中端点的抽象表示,包含进行网络通信必须的五种信息:连接使用的协议,本地主机的IP地址,本地进程的协议端口,远地主机的IP地址,远地进程的协议端口。应用层通过传输层进行数据通信时,TCP会遇到同时为多个应用程序进程提供并发服务的转载 2017-02-20 16:26:25 · 408 阅读 · 0 评论 -
Socket与TCP/UDP编程
原文http://blog.youkuaiyun.com/xn4545945/article/details/8098646http://blog.youkuaiyun.com/qinpeng100423/article/details/8980423一、简介套接字(socket)是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元。它是网络通信过程中端点的抽象表示,包含进行网络通转载 2017-02-20 16:29:44 · 474 阅读 · 0 评论 -
什么是socket
我们知道进程通信的方法有管道、命名管道、信号、消息队列、共享内存、信号量,这些方法都要求通信的两个进程位于同一个主机。但是如果通信双方不在同一个主机又该如何进行通信呢?在计算机网络中我们就学过了tcp/ip协议族,其实使用tcp/ip协议族就能达到我们想要的效果,如下图(图片来源于《tcp/ip协议详解卷一》第一章1.3) 、转载 2017-02-20 16:31:34 · 591 阅读 · 0 评论 -
I/O多路复用之select
I/O多路复用之select1、什么是I/O多路复用 关于什么是I/O多路复用,在知乎上有个很好的回答,可以参考罗志宇前辈的回答。 这里记录一下自己的理解。我认为要理解这个术语得从两方面去出发,一是:多路是个什么概念?二是:复用的什么东西?先说第一个问题。多路指的是多条独立的i/o流,i/o流可以这么理解:读是一条流(称之为读流,比如输入流),写是一条流(转载 2017-02-20 16:33:36 · 297 阅读 · 0 评论 -
Socket深入学习
socket编程原理1、问题的引入1) 普通的I/O操作过程:UNIX系统的I/O命令集,是从Maltics和早期系统中的命令演变出来的,其模式为打开一读/写一关闭(open-write-read-close)。在一个用户进程进行I/O操作时,它首先调用“打开”获得对指定文件或设备的使用权,并返回称为文件描述符的整型数,以描述用户在打开的文件或设备上转载 2017-02-20 17:49:29 · 710 阅读 · 0 评论 -
socket编程之select()
Select在Socket编程中还是比较重要的,它能够监视我们需要监视的文件描述符的变化情况——读写或是异常。 int select(int maxfdp,fd_set *readfds,fd_set *writefds,fd_set *errorfds,struct timeval *timeout); /*参数列表int maxfdp是一个整数值,是指集合中所有文件描述符的范围原创 2017-01-24 11:15:31 · 429 阅读 · 0 评论 -
select阻塞与非阻塞的含义
一个套接字阻塞或者不阻塞,select就在那里,它可以针对这2种套接字使用,对任何一种套接字的轮询检测,超时时间都是有效的,区别就在于:当select完毕,认为该套接字可读时,1 .阻塞的套接字,会让read阻塞,直到读到所需要的所有字节;2 .非阻塞的套接字,会让read读完fd中的数据后就返回,但如果原本你要求读10个数据,这时只读了8个数据,如果你不再次使用selec转载 2017-01-24 11:44:59 · 4380 阅读 · 0 评论 -
Socket学习之select最简版服务器
首先创建一个Windows网络程序,定义变量->获得WINDOCK版本->加载WINSOCK库->初始化->创建套接字->设置套接字选项->关闭套接字->卸载WINSOCK库->释放资源首先要初始化一个WinSockettypedef struct WSAData { WORD wVersion;原创 2017-01-27 10:46:04 · 1374 阅读 · 0 评论 -
Socket学习select服务器最简单的客户端
int _tmain(int argc, _TCHAR* argv[]){//初始化WinsockWSADATA wsaDATA;WORD version = MAKEWORD(2, 0);int ret = WSAStartup(version, &wsaDATA);if(ret != 0)cout SOCKET m_hSocket;SOCKA原创 2017-01-28 04:48:09 · 844 阅读 · 0 评论 -
Socket学习之select多路复用的客户/服务器模型
1. 阻塞与非阻塞首先介绍几个基本的概念。阻塞方式( block ),顾名思义,就是进程或是线程执行到这些函数时必须等待某个事件的发生,假如事件没有发生,进程或线程就被阻塞,函数不能立即返回。非阻塞方式( non-block ),就是进程或线程执行此函数时不必非要等待事件的发生,一旦执行肯定返回,以返回值的不同来反映函数的执行情况,假如事件发生则和阻塞方式相转载 2017-01-29 22:23:22 · 254 阅读 · 0 评论 -
多客户端通信之Select服务器
多客户端通信之Select服务器// server3.cpp : 定义控制台应用程序的入口点。 //include “stdafx.h”include include include “SocketList.h”using namespace std;DWORD WINAPI WorkThread(LPVOID lpParam) { SocketList* userlist=(Sock原创 2017-01-30 21:15:12 · 528 阅读 · 0 评论 -
Socket客户端,服务器通信demo
socket.h#ifndef SOCKET_H#define SOCKET_H#include #include string>enum TypeSocket {BlockingSocket, NonBlockingSocket};class Socket {public: virtual ~Socket(); Socket(const Soc转载 2017-02-02 14:58:36 · 1444 阅读 · 0 评论 -
Socket学习之解决TCP半包粘包问题
问题产生TCP是一个数据流协议,所以TCP发送的数据包大小是不可控制的,这时候就会出现粘包和半包的现象,下面这张图是我从网上找的,描述很形象1. 情况1,Data1和Data2都分开发送到了Server端,没有产生粘包和拆包的情况。2. 情况2,Data1和Data2数据粘在了一起,打成了一个大的包发送到Server端,这个情况就是粘包。3. 情况3,D原创 2017-02-06 08:58:25 · 6502 阅读 · 2 评论