网络
网络
曹经纬
这个作者很懒,什么都没留下…
展开
-
IOCP和Asio中回调函数的对比
1.IOCP中的回调函数形式://////////////////////////////////////////////////////////// initsock.h文件#include #pragma comment(lib, "WS2_32") // 链接到WS2_32.libclass CInitSock {public: CInitSock(BYTE mino原创 2013-12-20 16:53:28 · 1299 阅读 · 0 评论 -
WinSocket模型的探讨——完成端口模型
众所皆知,完成端口是在WINDOWS平台下效率最高,扩展性最好的IO模型,特别针对于WINSOCK的海量连接时,更能显示出其威力。其实建立一个完成端口的服务器也很简单,只要注意几个函数,了解一下关键的步骤也就行了。 这是篇完成端口入门级的文章,分为以下几步来说明完成端口: 函数常见问题以及解答步骤例程1、函数: 我们在完成端口模型下会使用到的最重要的两个函数转载 2013-11-19 22:54:37 · 876 阅读 · 0 评论 -
网络通信的大端小端问题
一直有个疑问,为什么socket编程中像端口 ip地址都需要转换为网络大端数据(hton pton),那为什么发送的数据就不需要转换呢?原创 2013-11-16 22:18:05 · 1015 阅读 · 0 评论 -
socket中的半包问题
最近在开发C++的服务端,但是客户端是用C#来写的。测试的时候发现,当服务端循环向客户端发送n包数据的时候,客户端收到的数据包都是不完整的包,也就是第一次接受到包的上半部分,下一次接受包的下半部分。这种情况虽然也可以把包解析出来,但是及其繁琐,最好要避免这样情况的发生。找了很久原因,最终总算把问题解决了,解决的办法就是:发送和接受的底层函数的第二个参数int maxBufferLength 必原创 2013-11-15 23:44:22 · 666 阅读 · 0 评论 -
VS2010编译错误:fatal error C1189: #error : This file requires _WIN32_WINNT to be #defined at least to 0x
在xp和win7上都遇到一个诡异的问题,先记下来。 在visual studio 2010编译程序的时候,出现如下的报错:Error C1189: #error : This file requires _WIN32_WINNT to be #defined at least to 0×0403. Value 0×0501 or higher is recommended. c:\Pr转载 2014-04-11 15:42:38 · 758 阅读 · 0 评论 -
集线器,路由器,交换机的作用和区别是什么?如何区分交换机,集线器,路由器?
号称网络硬件三剑客的集线器(Hub)、交换机(Switch)与路由器(Router)一直都是网络界的活跃分子,但让很多初入网络之门的菜鸟恼火的是,它们三者不仅外观相似,而且经常呆在一起,要想分清谁是谁,感觉有点难!就让我们一起来看看它们之间有什么区别和联系吧! 三剑客的工作原理 一、集线器1.什么是集线器 在认识集线器之前,必须先了解一下中继器。在我们接触到的网络中,最简单转载 2014-01-08 15:22:19 · 558 阅读 · 0 评论 -
VC的生产者消费者模型
#include #include #include HANDLE empty_Semaphore;//设置信号量用。empty_Semaphore表示空的缓冲池的数量HANDLE full_Semaphore;//用full_Semaphore表示满的缓冲池的数量HANDLE mutex_Semaphore;//用mutex_Semaphore表示互斥信号量void Produc原创 2013-12-11 17:44:37 · 1088 阅读 · 0 评论 -
C#客户端 C++服务端 乱码问题
不同语言之间进行网络通信时,出现乱码是一种普遍的现象。我在工作中也遇到了这样的问题——客户端是用C#来写的,服务端是用C++来写的,以下是解决乱码问题的方法:socket 通信,客户端采用c# 发送报文如下: client.Connect(ipAddress, port); byte[] byteData = En原创 2013-11-14 22:53:32 · 1544 阅读 · 0 评论 -
服务端测试
一、每秒的最大传输速度二、每秒能处理的最大连接数三、服务端向客户端发送1亿个包,客户端是否能收到1亿个包,确保不掉包四、客户端向服务端发送1亿个包,服务端是否能收到1亿个包,确保不掉包原创 2013-11-10 14:47:37 · 687 阅读 · 0 评论 -
服务器集群学习笔记
=============================================================负载均衡的目的:1、系统高可用性。组成系统的某些设备或部件失效,并不会影响正常的服务。2、系统可扩展性。用户的增加,引起访问数乃至流量的增加,这种情形下,需要对系统进行扩容,以应对这种快速增长。对于提供高可用服务的互联网网站,其对可扩展的基本要求就是在保持系统服原创 2014-04-21 17:36:04 · 606 阅读 · 0 评论 -
创建套接字出错
在程序的初始化部分加上这段代码:WORD wVersionRequested;WSADATA WSAData; wVersionRequested = MAKEWORD(2, 2); if (WSAStartup (wVersionRequested , &WSAData) != 0) {WSACleanup( );MessageBox("初始化S转载 2014-03-07 11:28:50 · 670 阅读 · 0 评论 -
高性能高可用服务器开发核心思想
1、异步非阻塞2、负载均衡3、双机热备4、数据库非实时读写原创 2014-01-20 15:09:19 · 718 阅读 · 0 评论 -
LVS的三种工作模式和十种调度算法(负载均衡算法)
LVS集群采用IP负载均衡 技术和基于内容请求分发技术。调度器具有很好的吞吐率,将请求均衡地转移到不同的服务器 上执行,且调度器自动屏蔽掉服务器的故障,从而将一组服务器构成一个高性能的、高可用的虚拟服务器。整个服务器集群的结构对客户是透明的,而且无需修改客户端和服务器端的程序。为此,在设计时需要考虑系统的透明性、可伸缩性、高可用性和易管理性。 本文主要介绍一下LVS的调度算法和3中转载 2014-01-10 09:50:02 · 706 阅读 · 0 评论 -
行情服务器的接口
1、找到每个新连接,放入连接管理队列中。2、某个连接断开时,从连接管理队列中删除该连接。3、响应特定连接的请求。4、向所有的连接广播消息。5、心跳包技术实现连接超时功能,某一时间内没有收到该连接的任何请求,自动断开该连接。6、设置大小合适的发送字节的缓冲区,尽量让客户端不会出现粘包、半包的情况。7、 处理粘包问题。8、确保不会丢包,服务端发1亿个包,客户端也收到1亿个包原创 2013-12-07 23:24:12 · 842 阅读 · 0 评论 -
C# .NET利用Newtonsoft.Json来序列化和反序列化对象
JSON 即 JavaScript Object Natation,它是一种轻量级的数据交换格式,非常适合于服务器与 JavaScript 的交互。和 XML 一样,JSON 也是基于纯文本的数据格式。由于 JSON 天生是为 JavaScript 准备的,因此,JSON 的数据格式非常简单,您可以用 JSON 传输一个简单的 String,Number,Boolean,也可以传输一个数组,或者一原创 2013-11-15 16:06:19 · 3025 阅读 · 0 评论 -
网络层数据缓冲区大小的设置
在send(), recv()的时候,返回的是实际发送出去的字节(同步)或发送到socket缓冲区的字节(异步);系统默认的状态发送和接收一次为8688字节(约为8.5K);在实际的过程中发送数据和接收数据量比较大,可以设置socket缓冲区,而避免了send(),recv()不断的循环收发:// 接收缓冲区int nRecvBuf=32*1024;//设置为32Kse原创 2014-07-24 16:08:42 · 2552 阅读 · 0 评论 -
四层负载均衡和七层负载均衡的区别
1. 四层负责均衡:是通过报文中的目标地址和端口,再加上负载均衡设备设置的服务器选择方式,决定最终选择的内部服务器与请求客户端建立TCP连接,然后发送Client请求的数据。由上图可知:在四层负载设备中,把client发送的报文目标地址(原来是负载均衡设备的IP地址),根据均衡设备设置的选择web服务器的规则选择对应的web服务器IP地址,这样client就可以直接跟此服务器建立T转载 2014-12-04 16:24:04 · 370 阅读 · 0 评论 -
Boos::asio服务器开发之连接管理
boost.asio相信很多人听说过,作为一个跨平台的通信库,它的性能是很出色的,然而它却谈不上好用,里面有很多地方稍不注意就会出错,要正确的用好asio还是需要花一番精力去学习和实践的,本文将通过介绍如何写一个简单的通信程序来告诉读者如何使用asio,希望对asio的初学者有所帮助。由于只是介绍其基本用法,作为例子的简单示例并不考虑很多的业务逻辑和异常处理,只是介绍基本用法,让初学者入门。原创 2013-12-20 16:19:53 · 1458 阅读 · 0 评论 -
Asio服务端连接管理,实现广播数据
#ifndef MESSAGE_H#define MESSAGE_H#include #include #include class Message{public: enum { header_length = 4 }; enum { max_body_length = 512 }; Message() : body_length_(0) { } const原创 2013-12-23 19:14:59 · 678 阅读 · 0 评论 -
iocp网络通信之如何判断客户端连接断开
BOOL r = ::GetQueuedCompletionStatus(hCompletionPort, &dwBytesTransferred, (LPDWORD)&hCompletionSocket, (LPWSAOVERL APPED *) &lpOvlpEx, INFINITE); if (hCompletionSocket== INVALID_SOCKET || lpOv原创 2013-11-19 22:38:07 · 3139 阅读 · 0 评论 -
在线程里循环收发数据的问题
今天写了一个客户端,用的是winsock2库,开了两个线程,一个是发心跳包,一个是接收服务器发送过来的行情,却出现了一个意想不到的Bug:编译连接都没问题,运行exe时,却直接退出来了,根本就没有进入到线程的循环。这是为什么呢,郁闷了很久!解决办法:_beginthreadex后,加一句while(ture){}。但是问题又来了,把它从Console上转换到App上是,不能用while(t原创 2013-12-10 20:39:42 · 763 阅读 · 0 评论 -
在线程里开线程
//ThreadInThread.cpp#include "stdafx.h"#include #include #include int g_nCount;unsigned int __stdcall SubThreadFun(PVOID pM){ while(true) { printf("subthread\n"); Sleep(1000); } ret原创 2013-12-09 15:43:58 · 1027 阅读 · 0 评论 -
高性能、高可用、可扩展服务器集群开发关键技术
高性能、高可用、可扩展服务器集群开发关键技术:单机:1、线程池 异步收发 回调2、连接池 异步收发 回调 3、内存池 内存回收利用 内存动态扩展集群:3、负载均衡4、双机热备原创 2014-04-24 20:33:48 · 575 阅读 · 0 评论 -
Windows的两种群集服务
原创 2014-01-05 22:41:20 · 992 阅读 · 0 评论 -
简单的生产者消费者模型
一、实验任务1、在WINDOWS 2000环境下,创建一个控制台进程,此进程包括2个线程:生产者线程和消费者线程。2、用信号量机制解决进程(线程)的同步与互斥问题。二、实验目的1.掌握基本的同步互斥算法,理解生产者和消费者模型。2.了解Windows 2000/XP中多线程的并发执行机制,线程间的同步和互斥。3.学习使用Windows 2000/XP中基本的同步对象,掌握相转载 2013-12-18 10:16:37 · 670 阅读 · 0 评论 -
模拟行情服务器
//message.txt18-7-30 4000 4001 4002 4003 4004 4000 4001 4002 4003 4004 4000 4001 4002 4003 4004 4000 4001 4002 4003 400418-7-35 4005 4006 400718-7-40 400818-7-45 4009 4010#//SimulateMessage.h#ifn原创 2013-12-16 21:05:47 · 641 阅读 · 0 评论 -
四层和七层负载均衡的区别
简单理解四层和七层负载均衡:①所谓四层就是基于IP+端口的负载均衡;七层就是基于URL等应用层信息的负载均衡;同理,还有基于MAC地址的二层负载均衡和基于IP地址的三层负载均衡。 换句换说,二层负载均衡会通过一个虚拟MAC地址接收请求,然后再分配到真实的MAC地址;三层负载均衡会通过一个虚拟IP地址接收请求,然后再分配到真实的IP地址;四层通过虚拟IP+端口接收请求,然后再分配到真实的服务器;转载 2014-04-13 09:44:17 · 444 阅读 · 0 评论 -
用生产者消费者模型实现的线程安全环形队列
#ifndef CIRCULAR_BUFFER_H#define CIRCULAR_BUFFER_H#include #include #include #include "CurrentPrice.h"//templateclass CircularBuffer{public: CircularBuffer(int capacity); ~CircularBuffer(原创 2014-01-03 20:33:39 · 915 阅读 · 0 评论 -
一个简单的IOCP服务器实例
//////////////////////////////////////////////////////////// initsock.h文件#include #pragma comment(lib, "WS2_32") // 链接到WS2_32.libclass CInitSock {public: CInitSock(BYTE minorVer = 2, BYTE ma原创 2013-11-20 16:25:31 · 1014 阅读 · 0 评论 -
在类中使用_beginthreadex函数创建线程并访问该类中的数据成员
#include #include #include using boost::asio::ip::tcp; #include "boost/date_time/posix_time/posix_time.hpp" //include all types plus i/o#include "boost/date_time/posix_time/time_parsers.hpp"#in原创 2013-11-25 16:34:23 · 2184 阅读 · 0 评论 -
asio异步网络通信实例
服务端:#include #include #include #include #include using boost::asio::ip::tcp;#define max_len 1024class clientSession :public boost::enable_shared_from_this{public: clientSession(boost::as原创 2013-11-23 15:38:30 · 1005 阅读 · 0 评论 -
获取本地主机名和IP地址
// GetHostIPAddr.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"////#include ////#pragma comment(lib,"wsock32.lib")#pragma comment(lib, "ws2_32.lib") // 链接到WS2_32.lib #include #include #include原创 2013-11-22 14:18:58 · 663 阅读 · 0 评论 -
在类中使用线程
在类中使用线程,必须要注意两点一、线程函数必须是类的静态成员函数或全局函数,建议最好声明为类的静态成员函数。原因:线程处理函数有且只有一个void*类型的参数。类的非静态成员函数被调用时,系统会隐式传入一个参数——this指针,如果把线程处理函数定义为类的一般成员函数,该线程处理函数就有两个参数了,一个是线程创建时的参数,另一个是被调用时隐式传入的this指针。利用反证法,所以要把线程处理函数原创 2013-11-14 23:07:54 · 1066 阅读 · 0 评论 -
如何做应用服务器集群、均衡负载、双机热备
首先是购买多台服务器做服务器集群,然后购买服务器负载均衡设备,让厂家配置,实现负载均衡功能。原创 2014-01-09 16:36:53 · 2009 阅读 · 0 评论 -
判断网络状态
C++实现// GetInternetConnState.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include #include #pragma comment(lib, "Wininet.lib")int main(){ DWORD flags;//上网方式 BOOL m_bOnline;//是否在线 m_原创 2014-01-09 10:08:17 · 449 阅读 · 0 评论 -
CreateThread和_beginthreadex的区别
1、_beginthreadex的底层是通过调用CreateThread函数来实现的。2、分别使用CreateThread和_beginthreade创建线程,然后再里面做一个1亿次的 i++ ,前者结果小于1亿,后者等于1亿。3、根据开发的经验,在Console程序一般使用CreatThread, 在win32 和MFV程序一般使用_beginthreadex。原创 2013-12-10 12:13:22 · 502 阅读 · 0 评论 -
LVS三种负载均衡方式
Linux Virtual Server (LVS)是一套完整的基于IP的负载均衡的集群软件。LVS运行在一对有相似配置的计算机上:一个作为活动LVS Router(Active LVS Router),一个作为备份LVS Router(Backup LVS Router)。活动LVS Router服务有两个角色:* 均衡负载到真实服务器上。* 检查真实服务器提供的服务是否正常。备份L转载 2014-12-04 17:03:03 · 541 阅读 · 0 评论