- 博客(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
epoll封装与测试代码
2015-03-11
Socket 类封装 改进版
2015-03-09
est_for_shutdown_and_close源代码
2015-03-09
test_for_shutdown_and_close
2015-03-09
Socket-类封装
2015-02-28
echoServer定长包与添加报头版本
2015-02-27
基于多进程的P2P聊天程序
2015-02-27
echoserver多进程版
2015-02-26
ShmFifo源代码(C++版)
2015-02-10
shmfifo源代码(C语言版)
2015-02-10
C++ 标准模版库
2013-10-20
codeblocks12.10汉化包
2013-08-09
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人