网络编程
文章平均质量分 56
herostarone
这个作者很懒,什么都没留下…
展开
-
TCP UDP select超时总结
UDP的recvfrom超时:fd_set ReadSet;FD_ZERO(&ReadSet); FD_SET(sockEncoder,&ReadSet); timeout.tv_sec = 1; timeout.tv_usec = 0; ret = select(0, &ReadSet, NULL, NULL, &timeout); if(ret>0) {原创 2012-03-07 23:15:00 · 2924 阅读 · 0 评论 -
ASIO 同步
Boost.Asio是一个跨平台的网络及底层IO的C++编程库,它使用现代C++手法实现了统一的异步调用模型。头文件#include 名空间using namespace boost::asio;ASIO库能够使用TCP、UDP、ICMP、串口来发送/接收数据,下面先介绍TCP协议的读写操作对于读写方式,ASIO支持同步和异步两种方式,首先登场的是同步方式,下面请同步方式自转载 2012-05-01 22:21:21 · 1072 阅读 · 0 评论 -
服务器的性能指标
服务器的性能指标 作为一个网络服务器程序,性能永远是第一位的指标。性能可以这样定义:在给定的硬件条件和时间里,能够处理的任务量。能够最大限度地利用硬件性能的服务器设计才是良好的设计。 设计良好的服务器还应该考虑平均服务,对于每一个客户端,服务器应该给予每个客户端平均的服务,不能让某一个客户端长时间得不到服务而发生“饥饿”的状况。 可伸缩性,也就是说,随着硬件能力的转载 2012-05-01 22:44:53 · 1705 阅读 · 0 评论 -
boost::asio::ip::tcp实现网络通信的小例子
我稍稍整理了下,就是加了点注释,很基本的东西,大家可以参考socket的几个流程,我上面也有提示的,希望对大家有所帮助。最后,如果大家有什么好的方法希望能让我也分享下,谢谢!服务端:#includeboost/asio.hpp>#includeboost/bind.hpp>#includeboost/shared_ptr.hpp>#include转载 2012-05-01 22:02:15 · 2107 阅读 · 0 评论 -
ASIO的异步方式
ASIO的异步方式2009年10月29日 星期四 下午 4:54嗯?异步方式好像有点坐不住了,那就请异步方式上场,大家欢迎...大家好,我是异步方式和同步方式不同,我从来不花时间去等那些龟速的IO操作,我只是向系统说一声要做什么,然后就可以做其它事去了。如果系统完成了操作, 系统就会通过我之前给它的回调对象来通知我。在ASIO库中,异步方转载 2012-05-01 22:23:11 · 1050 阅读 · 0 评论 -
配置开发支持高并发TCP连接的Linux应用程序全攻略zz
1、修改用户进程可打开文件数限制在Linux平台上,无论编写客户端程序还是服务端程序,在进行高并发TCP连接处理时,最高的并发数量都要受到系统对用户单一进程同时可打开文件数量 的限制(这是因为系统为每个TCP连接都要创建一个socket句柄,每个socket句柄同时也是一个文件句柄)。可使用ulimit命令查看系统允许 当前用户进程打开的文件数限制:[speng@as4 ~]$ ulimi转载 2012-05-04 20:40:19 · 2198 阅读 · 0 评论 -
Nagle算法
Nagle算法是以他的发明人John Nagle的名字命名的,它用于自动连接许多的小缓冲器消息;这一过程(称为nagling)通过减少必须发送包的个数来增加网络软件系统的效率。Nagle算法于1984年定义为福特航空和通信公司IP/TCP拥塞控制方法,这使福特经营的最早的专用TCP/IP网络减少拥塞控制,从那以后这一方法得到了广泛应用。Nagle的文档里定义了处理他所谓的小包问题的方法,这种问题指转载 2012-05-20 10:36:17 · 643 阅读 · 0 评论 -
send或者write socket遭遇SIGPIPE信号
当服务器close一个连接时,若client端接着发数据。根据TCP协议的规定,会收到一个RST响应,client再往这个服务器发送数据时,系统会发出一个SIGPIPE信号给进程,告诉进程这个连接已经断开了,不要再写了。又或者当一个进程向某个已经收到RST的socket执行写操作是,内核向该进程发送一个SIGPIPE信号。该信号的缺省学位是终止进程,因此进程必须捕获它以免不情愿的被终止。转载 2012-05-19 23:49:17 · 1383 阅读 · 0 评论 -
TCP 状态总结。
经过自己的实验:客户机 windows,服务器:linux1.客户机建立连接,服务器shutdown。客户机进入CLOSE_WAIT,服务器进入FIN2_WAIT.此时客户机可以正常给服务器发数据。服务器正常回复ack。2.客户机建立连接,服务器close 。客户机进入CLOSE_WAIT,服务器进入FIN2_WAIT.此时客户机可以正常给服务器发数据(以为发送正常,原创 2012-05-20 09:38:46 · 1119 阅读 · 0 评论 -
socket tcp 产生 rst响应的情况
socket tcp 产生 rst响应的情况(属于硬错误)1. syn发送到服务器主机,但是目的端口并未运行。则产生一个ECONRFUSED错误。客户端立即返回。比如telnet 192.168.1.55 8889,条件:55主机在局域网上并且可达(也可以换成可以到达的网络ip地址),但是8889这个端口并未使用(可能服务器已经关闭),则服务器(对方主机tcp内核)发送一个rst相应给转载 2012-05-19 23:43:39 · 5639 阅读 · 1 评论 -
c++封装ping程序类
头文件:#pragma once#include class CPing{public: CPing(void); ~CPing(void); bool CanPing(const char* pDscAddr); void Ping(const char* pDscAddr, int nPackNum = 4, int nPackSize = 32);转载 2012-08-23 09:13:45 · 2367 阅读 · 0 评论 -
自己开发的基于boost asio的网络引擎
今天找到了贵论坛,发现坛主的很多想法和本人不谋而合,本人近1年主要精力都致力于开发一个大型多人在线游戏的基本架构和相关的技术模组。而我欣喜的发现我与坛主的研究方向正好相反:我是先从服务器端开始研究入手的,目前服务器端告一段落,正准备开始客户端的研发,在寻找客户端引擎的时候碰巧找到了这里。我看到坛主的这个板块,了解到Orz正需要一些服务器方面的资料,在此我先奉上个人的服务器端的一些成果,希望能有转载 2012-05-01 22:01:23 · 3107 阅读 · 0 评论 -
boost高并发网络框架+线程池
boost的官方例子,有单线程的网络框架,httpserver2是线程池的。下面参照网上某人的代码修改了一点(忘了哪位大仙的代码了) 测试工具,适用stressmark,测试效果非常好, 9000个/s #includestdio.h>#include "AuthenHandle.h"#include "configure.h"#转载 2012-05-01 21:37:29 · 17693 阅读 · 7 评论 -
Linux学习笔记
该文章是小弟学习linux归纳出来的一些基础知识,也是做为自己的参考资料,希望各位渴望学习linux的朋友们共同学习。 1、linux分区 --在linux里面所有的设备、任何东西,在linux看来都是文件。 --文件在它看来,有两种形式: 第一种是字符型(键盘输入、打印机); 第二种是二进制型(硬盘、光驱、U盘) --linux中所有硬件 --手动转载 2012-03-08 20:12:21 · 566 阅读 · 0 评论 -
UDP发送总结
调试了半天,发现前几个命令好用,后面的就死了,最后发现错误的包后面多了个r,查找下才知道if(sendto(sock_UDP, sendbuf.c_str(), (int)sendbuf.size()+1, 0, (struct sockaddr*)&destaddr, length))一定要(int)sendbuf.size()+1,不加以的话最后的结束字符时不能发送出去的,或者也可以在原创 2012-03-07 22:54:35 · 666 阅读 · 0 评论 -
网络编程小结
做了一个转发TCP 和UDP的服务端,但是现在测试老有问题,就是UDP总会有那么几次超时,原因还没找到,不过先总结一下网络的编程。首先默认的状态下,recvfrom和recv都是阻塞的状态,也就是没接收到会一直阻塞,知道返回,但是可以通过select设置超时:TIMEVAL tWait; tWait.tv_sec = 0; tWait.tv_usec = 1000000; //原创 2012-03-07 22:58:13 · 607 阅读 · 0 评论 -
API SOCKET基础(4)网络字节序与主机字节序的转换
在对IP地址结构体SOCKADDR_IN赋值的时候,经常会用到下列的函数htonl,htons,inet_addr,与之相对应的函数是ntohl,ntohs,inet_ntoa。查看这些函数的解析,会发现这些函数其实是与主机字节序和网络字节序之间转换有关。就是什么网络字节序,什么是主机字节序呢?下面我写出他们之间的转换:用IP地址127.0.0.1为例: 第一步 127转载 2012-03-08 19:59:50 · 760 阅读 · 0 评论 -
PCip改变后对socket的影响
如果已经建立的socket,如果改变了PC的IP,则socket不受影响,前提是用localaddr.sin_addr.s_addr = INADDR_ANY;但是PC改变IP后,此socket加入的组播需要重新加入:所以重新建立socket,重新加入组播 2. bind端口之前,设置socket选项REUSEADDR,支持一个端口绑定多个socket。原因是一个端口close之后,并原创 2012-03-08 20:00:46 · 2023 阅读 · 0 评论 -
多个线程调用同一个线程函数
多个线程调用同一个线程函数 悬赏分:50 - 解决时间:2007-12-11 13:59 如题,能这样吗?因为有很多个操作,但是这些操作都是一样的,所以想用相同的线程函数,但是感觉运行时线程还是一个一个运行,并没有提高速度,应该是我理解错了!!老大些帮帮忙,给个建议 问题补充:我的意思是线程处理函数,刚刚找了点资料,觉得这想法没有错,只要线程里面不用全局或者静态变量转载 2012-03-08 20:15:53 · 10478 阅读 · 0 评论 -
关于SO_REUSEADDR的使用说明(1)
1. 可以对一个端口进行多次绑定,一般这个是不支持使用的; 2. 对于监听套接字,比较特殊。如果你定义了SO_REUSEADDR,并且让两个套接字在同一个端口上进行接听,那么对于由谁来ACCEPT,就会出现歧 义。如果你定义个SO_REUSEADDR,只定义一个套接字在一个端口上进行监听,如果服务器出现意外而导致没有将这个端口释放,那么服务器重新启动 后,你还可以用这个端口,因为你已经规定可以转载 2012-03-08 20:02:29 · 720 阅读 · 0 评论 -
send 过程
对于send函数: send函数只负责将数据提交给协议层。 当调用该函数时,send先比较待发送数据的长度len和套接字s的发送缓冲区的长度,如果len大于s的发送缓冲区的长度,该函数返回SOCKET_ERROR; 如果len小于或者等于s的发送缓冲区的长度,那么send先检查协议是否正在发送s的发送缓冲中的数据; 如果是就等待协议把数据发送完,如果协转载 2012-03-08 20:04:33 · 1177 阅读 · 0 评论 -
TCP UDP超时代码段demo
UDP的recvfrom超时:fd_set ReadSet;FD_ZERO(&ReadSet); FD_SET(sockEncoder,&ReadSet); timeout.tv_sec = 1; timeout.tv_usec = 0; ret = select(0, &ReadSet, NULL, NULL, &timeout); if(ret>0) {原创 2012-03-08 20:07:52 · 1128 阅读 · 1 评论 -
配置/etc/exports文件
http://book.51cto.com/art/200808/85173.htm7.2.2 配置/etc/exports文件用户可以把需要共享的文件系统直接编辑到/etc/exports文件中,这样当NFS服务器重新启动时系统就会自动读取/etc/exports文件,从而告诉内核要输出的文件系统和相关的存取权限。在下面的例子中显示了/etc/exports文件中几个条目项的内容,被挂转载 2012-03-08 20:09:34 · 7482 阅读 · 0 评论 -
Linux find命令详解
由于find具有强大的功能,所以它的选项也很多,其中大部分选项都值得我们花时间来了解一下。即使系统中含有网络文件系统( NFS),find命令在该文件系统中同样有效,只你具有相应的权限。在运行一个非常消耗资源的find命令时,很多人都倾向于把它放在后台执行,因为遍历一个大的文件系统可能会花费很长的时间(这里是指30G字节以上的文件系统)。一、find 命令格式1、find命令的一般转载 2012-03-08 20:11:21 · 503 阅读 · 0 评论 -
TCP 发送机制
TCP建立连接后,同步了各自的syn,并接收了对方的win窗口大小。假设发送5k的数据:情况1:每次发送1024个字节,连续发送5次,不管是否接收到对方的ack,直到发现对方的接收缓冲为0.而此时,接收端在接收到第一包的数据后,并不急于回复发送端ack,而是等待一段时间,一起回复。 情况2: 第一次发送1024,等待接收端回复ack后,第二次发送2个 1024,这种应该原创 2012-11-29 19:09:22 · 1285 阅读 · 0 评论