
unix网络编程
cherish_2012
这个作者很懒,什么都没留下…
展开
-
Linux 下ACE的构建
Linux 下ACE的构建1. 设置环境变量ACE_ROOT,命令如下:“vi /etc/profile” ,在“export PATH USER….”后加入4行 ACE_ROOT=/opt/ACE export ACE_ROOT LD_LIBRARY_PATH=$ACE_ROOT/aceLD_LIBRARY_PATH export LD_LIBRARY_PAT转载 2014-03-31 21:01:21 · 617 阅读 · 0 评论 -
网络中出现TCP、UDP粘包、分包的两点解决办法
粘包产生原因:先说TCP:由于TCP协议本身的机制(面向连接的可靠地协议-三次握手机制)客户端与服务器会维持一个连接(Channel),数据在连接不断开的情况下,可以持续不断地将多个数据包发往服务器,但是如果发送的网络数据包太小,那么他本身会启用Nagle算法(可配置是否启用)对较小的数据包进行合并(基于此,TCP的网络延迟要UDP的高些)然后再发送(超时或者包大小足够)。那么这样的话,服转载 2014-12-02 18:09:05 · 31010 阅读 · 2 评论 -
Linux网络通信编程(套接字模型TCP\UDP与IO多路复用模型select\poll\epoll)
Linux下测试代码:TCP模型 1 //TCPClient.c 2 #includestring.h> 3 #includein.h> 4 #include 5 #include 6 #include 7 #define MYPORT 4000 8 #define BACKLOG 10 9 #define MAX_LEN 10010 11 int ma转载 2015-01-17 00:29:56 · 3631 阅读 · 2 评论 -
关于Tcp封包
TCP大致工作原理介绍:工作原理TCP-IP详解卷1第17章中17.2节对TCP服务原理作了一个简明介绍(以下蓝色字体摘自《TCP-IP详解卷1第17章17.2节》):尽管T C P和U D P都使用相同的网络层( I P),T C P却向应用层提供与U D P完全不同的服务。T C P提供一种面向连接的、可靠的字节流服务。面向连接意味着两个使用T C P的应用(通常是一个转载 2014-12-05 00:46:52 · 688 阅读 · 0 评论 -
O_NONBLOCK与O_NDELAY有何不同
O_NONBLOCK和O_NDELAY所产生的结果都是使I/O变成非搁置模式(non-blocking),在读取不到数据或是写入缓冲区已满会马上return,而不会搁置程序动作,直到有数据或写入完成。它们的差别在于设立O_NDELAY会使I/O函式马上回传0,但是又衍生出一个问题,因为读取到档案结尾时所回传的也是0,这样无法得知是哪中情况;因此,O_NONBLOCK就产生出来,它在读取不到转载 2014-12-08 14:02:03 · 949 阅读 · 0 评论 -
分布式缓存-Memcached
分布式缓存出于如下考虑,首先是缓存本身的水平线性扩展问题,其次是缓存大并发下的本身的性能问题,再次避免缓存的单点故障问题(多副本和副本一致性)。分布式缓存的核心技术包括首先是内存本身的管理问题,包括了内存的分配,管理和回收机制。其次是分布式管理和分布式算法,其次是缓存键值管理和路由。什么是Memcached许多Web 应用程序都将数据保存到RDBMS中,应用服务器从中读取数据并在浏览器转载 2015-01-13 12:59:48 · 578 阅读 · 0 评论 -
关于PF_INET和AF_INET的区别
在写网络程序的时候,建立TCP socket: sock = socket(PF_INET, SOCK_STREAM, 0);然后在绑定本地地址或连接远程地址时需要初始化sockaddr_in结构,其中指定address family时一般设置为AF_INET,即使用IP。相关头文件中的定义:AF = Address Family PF转载 2014-12-08 14:07:27 · 789 阅读 · 0 评论 -
IO复用高级应用:同时处理TCP和UDP服务
一个socket只能与一个socket地址绑定即一个socket只能监听一个端口,服务器如果要同时监听多个端口就必须创建多个socket,若在同一个端口监听多个服务也要创建多个socket绑定到这个端口上。现在服务器监听一个端口上的TCP和UDP请求,并将发送来的数据回射到客户端。服务端程序: ?12345转载 2015-01-16 23:47:19 · 1001 阅读 · 0 评论 -
epoll使用详解
在linux的网络编程中,很长的时间都在使用select来做事件触发。在linux新的内核中,有了一种替换它的机制,就是epoll。相比于select,epoll最大的好处在于它不会随着监听fd数目的增长而降低效率。因为在内核中的select实现中,它是采用轮询来处理的,轮询的fd数目越多,自然耗时越多。并且,在linux/posix_types.h头文件有这样的声明:#define __转载 2014-07-10 11:37:48 · 389 阅读 · 0 评论 -
UDP
一般的处理方式有以下2种情况:一、服务器不需要保存客户端的上下文逻辑数据: 这种情况处理起来比较简单,以下为大概的处理流程: 1,ListenThread接收到数据后,把数据和对方的端口和IP插入数据包队列 2,WorkThread线程处理数据包队列中的数据后把需要发送的数据插入发送队列 3,SendThread发送数据给客户端二、服务器需要保存客户端的原创 2015-01-17 10:06:13 · 660 阅读 · 0 评论 -
Linux/Unix IO多路复用之select网络编程(含源码)
前言本章节是用基本的Linux/Unix基本函数加上select调用编写一个完整的服务器和客户端例子,可在Linux(ubuntu)和Unix(freebsd)上运行,客户端和服务端的功能如下:客户端从标准输入读入一行,发送到服务端服务端从网络读取一行,然后输出到客户端客户端收到服务端的响应,输出这一行到标准输出 服务端代码如下:转载 2014-03-13 11:08:21 · 1030 阅读 · 0 评论 -
网络编程中常用函数实现
htonl、ntohl、htons、ntohs函数实现typedef unsigned short int uint16;typedef unsigned long int uint32; // 短整型大小端互换#define BigLittleSwap16(A) ((((uint16)(A) & 0xff00) >> 8) | \原创 2014-12-02 00:33:45 · 562 阅读 · 0 评论 -
Linux信号量 sem_t简介
函数介绍#include信号量的数据类型为结构sem_t,它本质上是一个长整型的数。函数sem_init()用来初始化一个信号量。它的原型为:int sem_init __P ((sem_t *__sem, int __pshared, unsigned int __value));sem为指向信号量结构的一个指针;pshared不为0时此信号量在进程间共享,否则只能为当前转载 2015-02-27 22:14:00 · 3870 阅读 · 0 评论 -
Linux下的I/O
Linux的I/O机制经历了一下几个阶段的演进:(1)同步阻塞I/O: 用户进程进行I/O操作,一直阻塞到I/O操作完成为止。(2)同步非阻塞I/O: 用户程序可以通过设置文件描述符的属性O_NONBLOCK,I/O操作可以立即返回,但是并不保证I/O操作成功。(3)异步阻塞I/O: 用户进程可以对I/O事件进行阻塞,但是I/O操作并不阻塞。通过select/poll/epoll等函数转载 2014-12-08 14:00:08 · 466 阅读 · 0 评论 -
Linux网络编程IPv4和IPv6的inet_addr、inet_aton、inet_pton等函数小结
知识背景:210.25.132.181属于IP地址的ASCII表示法,也就是字符串形式。英语叫做IPv4 numbers-and-dots notation。如果把210.25.132.181转换为整数形式,是3524887733,这个就是整数形式的IP地址。英语叫做binary data。(其实binary是二进制的意思)详细介绍,请参考: 网络字节序与主机字节序的转换转载 2015-01-28 07:15:57 · 784 阅读 · 0 评论 -
8种方式使进程终止
有8种方式使进程终止,其中前5种为正常终止,它们是 1:从 main 返回 2:调用 exit 3:调用 _exit 或 _Exit 4:最后一个线程从其启动例程返回 5:最后一个线程调用pthread_exit 异常终止有3种,它们是 6:调用 abort 7:接到一个信号并终止 8:最后一个线程对取消请求做出响应 #include转载 2014-03-14 23:30:58 · 1508 阅读 · 0 评论 -
system()函数
windows下system () 函数详解 windows操作系统下system () 函数详解(主要是在C语言中的应用) 函数名: system 功 能: 发出一个DOS命令 用 法: int system(char *command); system函数已经被收录在标准c库中,可以直接调用 程序例: #inclu转载 2014-02-25 15:52:57 · 712 阅读 · 0 评论 -
linux网络编程
(一)Linux网络编程--网络知识介绍Linux网络编程--网络知识介绍客户端和服务端 网络程序和普通的程序有一个最大的区别是网络程序是由两个部分组成的--客户端和服务器端.客户端 在网络程序中,如果一个程序主动和外面的程序通信,那么我们把这个程序称为客户端程序。 比如我们使用ftp程序从另外一 个地方获取文件的时候,是转载 2014-02-23 14:45:24 · 825 阅读 · 0 评论 -
多线程
多线程是程序员面试时常常会面对的问题,对多线程概念的掌握和理解水平,也会被一些老鸟用来衡量一个人的编程实力的重要参考指标。不论是实际工作需要还是为了应付面试,掌握多线程都是程序员职业生涯中一个必须经过的环节。其实当你把“多线程”和你的“职业生涯”联系在一起考虑的时候,就会觉得“多线程”是多么的渺小,对,没有跨越不过的山。不过就算它很渺小,但也有可能改变你的人生轨迹。不用担心,如果你对多线程还不太熟转载 2014-02-14 15:46:03 · 792 阅读 · 0 评论 -
进程通信
一、进程通信----共享内存父子进程之间为例:流程:1. 创建共享内存2. 创建子进程3. 父进程中 映射内存 向内存写数据strncpy wait同步子进程4. 子进程中 映射内存 等待父进程写入sleep 操作内存(可读) #include stdlib.h>#include stdio.h>#转载 2014-02-14 11:50:16 · 658 阅读 · 0 评论 -
select机制中FD_SET
FD_ZERO,FD_ISSET这些都是套节字结合操作宏 看看MSDN上的select函数, 这是在select io 模型中的核心,用来管理套节字IO的,避免出现无辜锁定. int select( int nfds,fd_set FAR *readfds, fd_set FAR *writefds,转载 2014-06-07 06:23:20 · 693 阅读 · 0 评论 -
网络编程中概念
TCP/IP、Http、Socket的区别网络由下往上分为 物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。 通过初步的了解,我知道IP协议对应于网络层,TCP协议对应于传输层,而HTTP协议对应于应用层, 三者从本质上来说没有可比性, socket则是对TCP/IP协议的封装和应用(程序员层面上)。 也可以说,TPC/IP原创 2014-11-27 16:42:20 · 592 阅读 · 0 评论 -
关于socket
我们深谙信息交流的价值,那网络中进程之间如何通信,如我们每天打开浏览器浏览网页时,浏览器的进程怎么与web服务器通信的?当你用QQ聊天时,QQ进程怎么与服务器或你好友所在的QQ进程通信?这些都得靠socket?那什么是socket?socket的类型有哪些?还有socket的基本函数,这些都是本文想介绍的。本文的主要内容如下:1、网络中进程之间如何通信?2、Socket是什么?转载 2014-11-27 16:45:48 · 502 阅读 · 0 评论 -
提高 Linux 上 socket 性能
加速网络应用程序的 4 种方法使用 Sockets API,我们可以开发客户机和服务器应用程序,它们可以在本地网络上进行通信,也可以通过 Internet 在全球范围内进行通信。与其他 API 一样,您可以通过一些方法使用 Sockets API,从而提高 Socket 的性能,或者限制 Socket 的性能。本文探索了 4 种使用 Sockets API 来获取应用程序的转载 2014-11-29 10:47:26 · 512 阅读 · 0 评论 -
epoll LT、ET模式分析
ET模式仅当状态发生变化的时候才获得通知,这里所谓的状态的变化并不包括缓冲区中还有未处理的数据,也就是说,如果要采用ET模式,需要一直read/write直到出错为止,很多人反映为什么采用ET模式只接收了一部分数据就再也得不到通知了,大多因为这样;而LT模式是只要有数据没有处理就会一直通知下去的. LT(level triggered)是缺省的工作方式,并且同时支持block和no-bl转载 2014-11-30 16:00:54 · 924 阅读 · 0 评论 -
libevent源码分析
1、入门1.1、概述Libevent是一个用于开发可扩展性网络服务器的基于事件驱动(event-driven)模型的网络库。Libevent有几个显著的亮点: (1)事件驱动(event-driven),高性能;(2)轻量级,专注于网络,不如 ACE 那么臃肿庞大; (3)源代码相当精炼、易读; (4)跨平台,支持 Windows、Linux、*BSD和 Mac Os;转载 2014-11-29 09:14:26 · 449 阅读 · 0 评论 -
High-Performance Server Architecture
设计一个稳定,高效的服务器,需要考虑很多的方面,不管是系统方面的,还是代码方面的。那么究竟有哪些? 一: 导致服务器低效的四个罪魁祸首:数据拷贝,(用户态/内核态切换)上下文切换,内存管理,锁竞争; 数据拷贝: ---首先提下零拷贝。零拷贝( zero-copy ),某种程度上来说可以有效的改善数据传输的性能,在内核驱动程序(比如网络堆栈或者磁转载 2014-11-29 10:45:04 · 528 阅读 · 0 评论 -
System IPC 与Posix IPC(semaphore信号灯)
POSIX下IPC主要包括三种:posix message queueposix semaphoresposix shared memorysysytem v IPC包括:system v message queuesystem v semaphoressystem v shared memory 1.Semaphores在POSIX IPC中,每个I转载 2015-02-27 11:01:45 · 970 阅读 · 0 评论