
网络通信编程
文章平均质量分 87
风吹过的时光
别问我是谁,我只是个过客。
展开
-
setsockopt()函数详解
在TCP连接中,recv等函数默认为阻塞模式(block),即直到有数据到来之前函数不会返回,而我们有时则需要一种超时机制使其在一定时间后返回而不管是否有数据到来,这里我们就会用到setsockopt()函数: int setsockopt(int s, int level, int optname, void* optval, socklen_t* optlen); 这里转载 2013-10-14 15:35:54 · 6001 阅读 · 0 评论 -
修改linux最大socket连接数
在Linux下Epoll模式默认只支持1024个连接,所以我们要修改一下Linux系统可打开的最大描述符限制。最简单的修改方法你 可以用ulimit -n 3000 把允许最大开打的描述符修改为3000,但是怎么做,只对当前命令终端打开的应用程序有效。要一劳永逸的,还是得修改/etc/security /limits 配置文件。 在文件中增加 * soft nof原创 2013-08-02 14:51:03 · 11141 阅读 · 0 评论 -
tcpdump参数解析及使用详解
tcpdump的选项介绍 -a 将网络地址和广播地址转变成名字; -d 将匹配信息包的代码以人们能够理解的汇编格式给出; -dd 将匹配信息包的代码以c语言程序段的格式给出; -ddd 将匹配信息包的代码以十进制的形式给出; -e 在输出行打印出数据链路层的头部信息,包括源mac和目的mac,以及网络层的协议; -f 将外部的Internet地址以数字的形式打印出来; -l 使标准输出变为缓冲行形式; -n 指定原创 2015-02-03 09:50:11 · 125931 阅读 · 4 评论 -
wireshark基本用法及过虑规则
Wireshark 基本语法,基本使用方法,及包过虑规则:1.过滤IP,如来源IP或者目标IP等于某个IP例子:ip.src eq 192.168.1.107 or ip.dst eq 192.168.1.107或者ip.addr eq 192.168.1.107 // 都能显示来源IP和目标IPlinux上运行的wireshar原创 2015-02-03 18:44:05 · 133644 阅读 · 2 评论 -
TCp传输粘包问题
解决TCP网络传输“粘包”问题 当前在网络传输应用中,广泛采用的是TCP/IP通信协议及其标准的socket应用开发编程接口(API)。TCP/IP传输层有两个并列的协议:TCP和UDP。其中TCP(transport controlprotocol,传输控制协议)是面向连接的,提供高可靠性服务。UDP(user datagramprot转载 2012-05-17 12:52:56 · 1059 阅读 · 0 评论 -
TCP/IP入门(3) --传输层
/**本篇博客由汗青ZJF整理并发布, 转载请注明出处:http://blog.youkuaiyun.com/zjf280441589/article/category/1854365*/传输层的主要功能 1)传输层为应用进程之间提供端到端的逻辑通信(网络层是为主机到主机提供逻辑通信)。 2)复用和分用: 复用是指发送方不同的应用进程都可以使用同一个传输转载 2015-06-08 14:47:42 · 980 阅读 · 0 评论 -
糊涂窗口综合症及其解决方法(Nagle算法,Clark方法,延时确认方法,CORK算法)
前记:TCP/IP详解系列,毕竟不是一本教材,很多地方讲的不细致。比如SWS未说明是什么就开始介绍其避免方法,还和nagle扯在了一起,直觉告诉我二者一定有猫腻,边搜索一下,果然很有收获。今天贴在这里,分享给大家。 第一部分:SWS何谓糊涂窗口综合症 当发送端应用进程产生数据很慢、或接收端应用进程处理接收缓冲区数据很慢,或二者兼而有之;就会使应用进程间传送的报文转载 2015-06-09 17:55:36 · 7334 阅读 · 0 评论 -
网络编程释疑之:TCP半开连接的处理(好)
熟悉基于TCP协议进行linux高性能、高并发服务端编程的朋友肯定应该知道每个文件描述符及其所占的资源对并发量的影响。在这种7*24甚至*365不间断运行的服务器上,一个描述符被浪费,两个被浪费...如果被浪费的多了,那还何谈高并发,高性能。除去文件描述被正常占用的情况外,是什么导致了我们可用的文件描述符越来越少呢?什么是半开连接?当客户端与服务器建立起正常的TCP连接后,转载 2015-06-09 15:19:03 · 5109 阅读 · 0 评论 -
linux 网络编程之最简单的tcp通信客户端
编写一个最为简单的tcp通信客户端。代码如下:#include #include using namespace std;#include #include #include #include #include int main(){ /*创建socket*/ int sd = socket(AF_INET, SOCK_STREAM, 0);原创 2015-06-11 15:32:06 · 1487 阅读 · 0 评论 -
Linux/Unix网络编程 epoll和select/poll的对比
select()是Linux/Unix 网络编程中的一个重要函数,通过调用select函数可以确定一个或者多个套接字(描述符)的状态,判断套接字上是否有数据需要读出或者写入 #includeselect.h> #include int select(int max_fd_p_1, fd_set *readset, fd_set* writeset, fd_set* exceptse原创 2014-04-14 06:31:35 · 1317 阅读 · 0 评论 -
领导者/追随者(Leader/Follower)
领导者/追随者(Leader/Follower)1.问题多线程是实现并发处理多事件的应用程序的一种常用技术。然而,很难实现高性能的多线程服务器应用程序。这些应用程序通常处理大量同时到达的多类型事件。为了有效地处理这种问题,有三个强制条件必须解决:1)服务请求可以来自为每个已连接的客户机分配的多事件源(如多TCP/IP套接字句柄)。因此,一个关键设计强制条件是在线程和事件源间确定有效的多转载 2014-05-05 06:06:45 · 9252 阅读 · 0 评论 -
在Linux中使用非阻塞的socket的情形下
在UNIX/LINUX下,非阻塞模式SOCKET可以采用recv+MSG_PEEK的方式进行判断,其中MSG_PEEK保证了仅仅进行状态判断,而不影响数据接收。对于主动关闭的SOCKET, recv返回-1,而且errno被置为9(#define EBADF 9 /* Bad file number */)或104 (#define ECONNRESET 104 /* Connecti转载 2013-09-16 10:32:47 · 1632 阅读 · 0 评论 -
如何判断Socket是否断开
Socket在连接以后,如果客户端非正常退出,比如网线掉了、超时退出等,服务器端的socket仍然有缓存,此时可以从该socket描述符中读出一些数据,短时间内甚至可以写,因此判断TCP socket是否断开及其不易,网上有很多方法,都不能精确判断。本人用select和recv写了一个,在缓冲区被读完以后判断非常管用。这里,recv时使用MSG_PEEK参数,数据不会从缓冲区中清除掉,因此不会影响转载 2013-09-16 10:25:14 · 6145 阅读 · 0 评论 -
linux select函数实用详解
select函数: 系统提供select函数来实现多路复用输入/输出模型。原型: #include #include select函数: 系统提供select函数来实现多路复用输入/输出模型。原型: #include #include int select(int maxfd,fd_set *rdset,fd_set *wrset,fd_se转载 2013-08-23 08:58:46 · 1231 阅读 · 0 评论 -
epoll为什么这么快,epoll的实现原理
以一个生活中的例子来解释.假设你在大学中读书,要等待一个朋友来访,而这个朋友只知道你在A号楼,但是不知道你具体住在哪里,于是你们约好了在A号楼门口见面.如果你使用的阻塞IO模型来处理这个问题,那么你就只能一直守候在A号楼门口等待朋友的到来,在这段时间里你不能做别的事情,不难知道,这种方式的效率是低下的.进一步解释select和epoll模型的差异.select版大妈做的是如下的事情:比如同转载 2013-11-18 16:00:27 · 1487 阅读 · 0 评论 -
socket简单练习
//以下代码,实现一个TCP socket练习,由客户端给服务器端发消息,服务器端接收信息。//不好意思,功能有点变态:服务器启动后会监视是否有客户端来建立连接,如果有,则接收等待。客户端每启动一次就有且只有一次向服务器发消息的机会,输入消息,回车发送后就进程退出。//功能虽然简单,但是也实现了基本的通信功能,如果结合我之前发的和线程相关的博客内容,再加上一点想象能力,我想要写一个功能强大原创 2012-05-16 14:18:19 · 890 阅读 · 0 评论 -
CLOSE_WAIT状态的原因与解决方法
这个问题之前没有怎么留意过,是最近在面试过程中遇到的一个问题,面了两家公司,两家公司竟然都面到到了这个问题,不得不使我开始关注这个问题。说起CLOSE_WAIT状态,如果不知道的话,还是先瞧一下TCP的状态转移图吧。关闭socket分为主动关闭(Active closure)和被动关闭(Passive closure)两种情况。前者是指有本地主机主动发起的关闭;而后者则是指本地主机检测转载 2013-11-13 14:18:18 · 1870 阅读 · 0 评论 -
UNIX网络编程之epoll 的accept , read, write(重要)
在一个非阻塞的socket上调用read/write函数,返回EAGAIN或者EWOULDBLOCK(注:EAGAIN就是EWOULDBLOCK)。从字面上看,意思是:EAGAIN: 再试一次 EWOULDBLOCK:如果这是一个阻塞socket, 操作将被block perror输出:Resource temporarily unavailable总结:转载 2014-04-14 07:01:02 · 7369 阅读 · 0 评论 -
UNIX网络编程——epoll的 et,lt关注点
epoll模型有两种工作模式,ET和LT两种模式下都有一些细节值得注意,以下是一些思考:一、ET模式下Q1:调用accept时,到底TCP完成队列里有多少个已经建立好的连接?这里又得分情况来说:没有连接。这种情况发生在TCP连接被客户端夭折,即在服务端调用accept之前客户端给出一个RST。该RST导致刚刚建立好的连接从服务器端的TCP完成队列中被移出。源自ber转载 2014-04-14 06:57:22 · 1114 阅读 · 0 评论 -
linux 网络编程之最简单的tcp通信服务端
编写一个最为简单的tcp通信服务端。原创 2015-06-11 13:14:45 · 1457 阅读 · 0 评论