自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(13)
  • 资源 (34)
  • 收藏
  • 关注

原创 Socket编程实践(13) --UNIX域协议

UNIX域协议   UNIX域套接字与TCP相比, 在同一台主机上, UNIX域套接字更有效率, 几乎是TCP的两倍(由于UNIX域套接字不需要经过网络协议栈,不需要打包/拆包,计算校验和,维护序号和应答等,只是将应用层数据从一个进程拷贝到另一个进程, 而且UNIX域协议机制本质上就是可靠的通讯, 而网络协议是为不可靠的通讯设计的).   UNIX域套接字可以在同一台主机上各进程之间传递文件描述符

2015-03-14 20:56:03 4263 2

原创 Socket编程实践(12) --UDP编程基础

UDP特点   无连接,面向数据报(基于消息,不会粘包)的数据传输服务;   不可靠(可能会丢包, 乱序, 重复), 但因此一般情况下UDP更加高效;UDP客户/服务器模型  UDP-API使用#include #include ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags, str

2015-03-14 20:34:10 2962

原创 Socket编程实践(10) --select的限制与poll的使用

select的限制用select实现的并发服务器,能达到的并发数一般受两方面限制:1)一个进程能打开的最大文件描述符限制。这可以通过调整内核参数。可以通过ulimit -n(number)来调整或者使用setrlimit函数设置,但一个系统所能打开的最大数也是有限的,跟内存大小有关,可以通过cat /proc/sys/fs/file-max 查看/**示例: getrlimit/setrlimit

2015-03-14 20:21:05 3741

原创 Socket编程实践(9) --套接字IO超时设置方法

引:超时设置3种方案1. alarm超时设置方法//代码实现: 这种方式较少用void sigHandlerForSigAlrm(int signo){ return ;}signal(SIGALRM, sigHandlerForSigAlrm);alarm(5);int ret = read(sockfd, buf, sizeof(buf));if (ret == -1

2015-03-14 19:53:23 4506 1

原创 Socket编程实践(5) --TCP粘包问题与解决

TCP粘包问题由于TCP协议是基于字节流且无边界的传输协议, 因此很有可能产生粘包问题, 问题描述如下   对于Host A 发送的M1与M2两个各10K的数据块, Host B 接收数据的方式不确定, 有以下方式接收:   先接收M1, 再接收M2(正确方式)   先接收M2, 再接收M1(错误)   一次性收到20k数据(错误)   分两次收到,第一次15k,第二次5k(错误)   分两次收到

2015-03-14 15:47:39 3983

原创 Socket编程实践(8) --Select-I/O复用

五种I/O模型介绍(1)阻塞I/O[默认]   当上层应用App调用recv系统调用时,如果对等方没有发送数据(Linux内核缓冲区中没有数据),上层应用Application1将阻塞;当对等方发送了数据,Linux内核recv端缓冲区数据到达,内核会把数据copy给用户空间。然后上层应用App解除阻塞,执行下一步操作。 (2)非阻塞I/O[少用]   上层应用App将套接字设置成非阻塞模式, 然

2015-03-14 15:32:34 4212

原创 Socket编程实践(6) --TCP服务端注意事项

僵尸进程处理1)通过忽略SIGCHLD信号,避免僵尸进程    在server端代码中添加    signal(SIGCHLD, SIG_IGN); 2)通过wait/waitpid方法,解决僵尸进程signal(SIGCHLD,onSignalCatch);void onSignalCatch(int signalNumber){ wait(NULL);}3) 如果多个客户端同时

2015-03-14 15:22:54 3118

原创 Socket编程实践(4) --多进程并发server

1.Socket地址复用int getsockopt(int sockfd, int level, int optname, void *optval, socklen_t *optlen);int setsockopt(int sockfd, int level, int optname, const void *optval, so

2015-03-14 15:07:19 4153

原创 Socket编程实践(3) --Socket API

socket函数#include #include int socket(int domain, int type, int protocol);创建一个套接字用于通信参数:   domain:指定通信协议族(protocol family),常用取值AF_INET(IPv4)   type:指定socket类型, 流式套接字SOCK_STREAM,数据报套接字SOCK_DGRAM,原始套接字

2015-03-14 12:24:49 3389

原创 Socket编程实践(2) --Socket编程导引

什么是Socket?    Socket可以看成是用户进程与内核网络协议栈的接口(编程接口, 如下图所示), 其不仅可以用于本机进程间通信,可以用于网络上不同主机的进程间通信, 甚至还可以用于异构系统之间的通信。 IPv4套接口地址结构    IPv4套接口地址结构通常也称为“网际套接字地址结构”,它以“sockaddr_in”命名,定义在头文件中//TCP/IP地址结构struct socka

2015-03-14 12:10:58 3506 2

原创 Socket编程实践(1) --TCP/IP简述

ISO的OSI    OSI(open system interconnection)开放系统互联模型是由ISO国际标准化组织定义的网络分层模型,共七层, 从下往上为:OSI七层参考模型物理层(Physical Layer)物理层定义了所有电子及物理设备的规范,为上层的传输提供了一个物理介质,本层中数据传输的单位为比特(bit/二进制位)。属于本层定义的规范有EIA/TIA RS-232、RJ-4

2015-03-14 11:50:27 4712

原创 Socket编程实践(11) --epoll原理与封装

常用模型的特点    Linux 下设计并发网络程序,有典型的Apache模型(Process Per Connection,PPC), TPC(Thread Per Connection)模型,以及 select/polL模型和epoll模型。 1 、PPC/TPC 模型    这两种模型思想类似,就是让每一个到来的连接一边自己做事去,别再来烦我(详见本系列博客).只是 PPC 是为它开了一个进

2015-03-11 22:23:33 7651 7

原创 Socket编程实践(7) --Socket-Class封装(改进版v2)

本篇博客定义一套用于TCP通信比较实用/好用Socket类库(运用C++封装的思想,将socket API尽量封装的好用与实用), 从开发出Socket库的第一个版本以来, 作者不知道做了多少改进, 每次有新的/好的想法尽量实现到该库当中来; 而且我还使用该库开发出作者第一个真正意义上的基于Linux的Server程序[MyHttpd, 在后续的博客当中, 我一定会将MyHttpd的实现原理与实现

2015-03-10 20:54:01 6051 5

TCPIP系列博客

计算机网络系列博客打包下载, 主要面向正在处于找工作阶段的本科生阅读

2015-04-08

epoll封装与测试代码

  在本部分我们实现一个较为好用实用的Epoll并发类, 由于实现代码与使用方式较简单, 因此就不在此赘述了, 下面我还使用了该类实现了一个基于Epoll的echo-server, 以演示该类的用法;   由于此处仅为Epoll类库的第一个版本, 因此错误之处必然会存在, 如果读者在阅读的过程中发现了该类库的BUG, 还望这篇博客的读者朋友不吝赐教; 而作者也会不断的更新该类库(主要更新代码我会发布到此处), 以处理新的业务需求;

2015-03-11

shutdown_close

  1.close终止了数据传送的两个方向;   而shutdown可以有选择的终止某个方向的数据传送或者终止数据传送的两个方向。

2015-03-09

Socket 类封装 改进版

实现中的几个注意点:   1 Socket类几个成员函数的访问权限为protected 使Socket类可以进行继承 但不允许私自使用;   2 TCPClient类的send receive方法使用了著名的writen readn 来源UNP 实现 解决了TCP的粘包问题   3 TCPSe

2015-03-09

est_for_shutdown_and_close源代码

  1.close终止了数据传送的两个方向;   而shutdown可以有选择的终止某个方向的数据传送或者终止数据传送的两个方向。   2.shutdown how=SHUT_WR(关闭写端)可以保证对等方接收到一个EOF字符(FIN段),而不管是否有其他进程已经打开了套接字(shutdown并没采用引用计数)。   而close需要等待套接字引用计数减为0时才发送FIN段。也就是说直到所有的进程都关闭了该套接字。

2015-03-09

test_for_shutdown_and_close

  1.close终止了数据传送的两个方向;   而shutdown可以有选择的终止某个方向的数据传送或者终止数据传送的两个方向。   2.shutdown how=SHUT_WR(关闭写端)可以保证对等方接收到一个EOF字符(FIN段),而不管是否有其他进程已经打开了套接字(shutdown并没采用引用计数)。   而close需要等待套接字引用计数减为0时才发送FIN段。也就是说直到所有的进程都关闭了该套接字。

2015-03-09

Socket-类封装

实现中的几个注意点:   1)Socket类几个成员函数的访问权限为protected, 使Socket类可以进行继承,但不允许私自使用;   2)TCPClient类的send/receive方法使用了著名的writen/readn(来源UNP)实现, 解决了TCP的粘包问题.   3)TCPServer端添加了地址复用, 可以方便TCP服务器重启;   4)添加了异常类,让我们在编写易出错的代码时,可以解放思想,不用一直考虑该函数调用出错会发生什么情况!

2015-02-28

echoServer(按行读取版本)

使用recv_peek实现按行读取readline(只能用于socket)

2015-02-27

echoServer定长包与添加报头版本

自定义应用层协议实践 发报文时:前四个字节长度+报文内容一次性发送; 收报文时:先读前四个字节,求出报文内容长度;根据长度读数据。 发送结构:

2015-02-27

基于多进程的P2P聊天程序

server端与client都有两个进程:   父进程负责从socket中读取数据将其写至终端, 由于父进程使用的是read系统调用的阻塞版本, 因此如果socket中没有数据的话, 父进程会一直阻塞; 如果read返回0, 表示对端连接关闭, 则父进程会发送SIGUSR1信号给子进程, 通知其退出;   子进程负责从键盘读取数据将其写入socket, 如果键盘没有数据的话, 则fgets调用会一直阻塞;

2015-02-27

echoserver多进程版

  我们的echo服务器最大的缺点就是无法支持多客户连接,即使客户端能够连接到服务器上,服务器也不为该客户做服务,(直接没什么反应),虽然链接是有的(也就是说,客户端是已经连接到服务器上的了,但是服务器就是不搭理你....)

2015-02-26

红黑树(RBtree)实现代码

一个基于C++的红黑树实现, RedBlackTree, C++, 二叉树, 平衡二叉树

2015-02-17

线程池(C/C++版)

C/C++ threadpool封装, 线程池, Linux, 多线程, pthread

2015-02-16

生产者消费者代码(C++版)

用Posix信号量, Posix互斥量, 解决生产者消费者问题(c++版)

2015-02-13

echoServer(thread版)源代码

将并发echo server改造成多线程形式   注意线程竞速问题的解决

2015-02-11

ShmFifo源代码(C++版)

  我们首先完成C语言版本的shmfifo(基于过程调用), 然后在此基础上实现C++版本的ShmFifo, 将1块共享内存与3个信号量(1个mutext信号量, 1个full信号量, 1个empty信号量)封装成一个类ShmFifo, 然后编写各自的测试代码

2015-02-10

shmfifo源代码(C语言版)

使用消息队列即可实现消息的先进先出(FIFO), 但是使用共享内存实现消息的先进先出则更加快速; 所涉及计数: 将申请到的共享内存作为一块缓冲区, 读/写进程不断的从其中读出/写入数据, 而读/写进程则就相当于生产者/消费者了, 因此,使用信号量sem_mutex(初值为1)来互斥访问共享内存, 使用sem_full(初值为共享缓冲区块数), sem_empty(初值为0)来同步两个进程;

2015-02-10

NetCat后门工具

Netcat,Windows后门工具,希望能够遵守相关法律,谢谢

2014-01-25

C++面向对象多线程编程.pdf

挺好的一本书,朋友给分享的,分享给大家,大家就不用到淘宝买PDF版得了

2013-11-12

C++ 多范型设计.pdf

挺好的一本书,朋友给分享的,分享给大家,大家就不用到淘宝买PDF版得了

2013-11-12

C++程序员必备常识.pdf

挺好的一本书,朋友给分享的,分享给大家,大家就不用到淘宝买PDF版得了

2013-11-12

C++ 编程思想 第2卷 实用编程技术.pdf

挺好的一本书,朋友给分享的,分享给大家,大家就不用到淘宝买PDF版得了

2013-11-12

C/C++语言硬件程序设计基于TMS320C5000系列DSP

挺好的一本书,朋友给分享的,分享给大家,大家就不用到淘宝买PDF版得了

2013-11-12

C 库函数 Word版

C 库函数 Word版 千辛万苦找打的 的确很有用

2013-10-25

GDAL1.8 已经编译完成

一个师兄发给的GDAL1.8 已经编译完成的 省去了大家自己编译繁琐的步骤 遥感 图像处理

2013-10-25

Java 程序员上班那点事儿

Java 程序员上班那点事儿 全本 清晰扫描版 花了两块大洋买的

2013-10-24

C++ 标准模版库

C++ STL (Standard Template Library标准模板库) 是通用类模板和算法的集 合,它提供给程序员一些标准的数据结构的实现如 queues(队列), lists(链表), 和 stacks(栈)等. C++ STL 提供给程序员以下三类数据结构的实现: 标准容器类 顺序性容器 vector 从后面快速的插入与删除,直接访问任何元素 deque 从前面或后面快速的插入与删除,直接访问任何元素 list 双链表,从任何地方快速插入与删除 关联容器 set 快速查找,不允许重复值 multiset 快速查找,允许重复值 map 一对多映射,基于关键字快速查找,不允许重复值 multimap 一对多映射,基于关键字快速查找,允许重复值 容器适配器 stack 后进先出 queue 先进先出 priority_queue 最高优先级元素总是第一个出列

2013-10-20

codeblocks12.10汉化包

code blocks 汉化插件 1 解压压缩文件 将codeblocks mo文件放到codeblocks根目录下: CodeBlocks share CodeBlocks locale zh CN (locale和zh CN没有的话自己新建) 2 重启codeblocks: "setting environment view internationnal "构选这个选项 下拉框中选中“chinese” ok">code blocks 汉化插件 1 解压压缩文件 将codeblocks mo文件放到codeblocks根目录下: CodeBlocks share CodeBlocks locale zh CN (locale和zh CN没有的话自己新建) 2 重启codeblocks: "setting environment view internationnal "构选这个选项 下拉 [更多]

2013-08-09

C_free_中文版

很好用的一个C/C++开发工具,安装是需要加载密匙,只要百度一下就可以.

2013-08-07

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除