网络编程

  • 高并发网络编程之epoll详解
    高并发网络编程之epoll详解

    在linux 没有实现epoll事件驱动机制之前,我们一般选择用select或者poll等IO多路复用的方法来实现并发服务程序.在大数据.高并发.集群等一些名词唱得火热之年代,select和poll的用武之地越来越有限,风头已经被epoll占尽. 本文便来介绍epoll的实现机制,并附带讲解一下select和poll.通过对比其不同的实现机制,真正理解为何epoll能实现高并发. select()和poll() IO多路复用模型 select的缺点: 单个进程能够监视的文件描述符的数量存在最大限

    网络编程May 2

  • 计算机网络编程基本概念
    计算机网络编程基本概念

    网络: 计算机网络由一组通过通信信道相互连接的机器组成.我们把这些机器称为主机(hosts)和路由器(routers). 路由: 路由器的作用是将信息从一个通信信道传递或转发(forward)到另一个通信信道. 信道: 通信信道(communication channel)进行解释:它是将字节序列从一个主机传输到另一个主机的一种手段,可能是有线电缆,如以太网(Ethernet),也可能是无线的,如WiFi[ ],或是其他方式的连接. 报文: 这里的信息(information)是指由程序创建和解

    基础, 网络编程April 15

  • 设计一种简化的 protocol buffer 协议

    我们一直使用 google protocol buffer 协议做客户端服务器通讯,为此,我还编写了pbc 库. 经过近三年的使用,我发现其实我们用不着那么复杂的协议,里面很多东西都可以简化.而另一方面,我们总需要再其上再封装一层 RPC 协议.当我们做这层 RPC 协议封装的时候,这个封装层的复杂度足以比全新设计一套更合乎我们使用的全部协议更复杂了. 由于我们几乎一直在 lua 下使用它,所以可以按需定制,但也不局限于 lua 使用.这两天,我便构思了下面的东西: 我们只需要提供 boolea

    网络编程April 6

  • 开发基于UDP广播的小型局域网聊天室
    开发基于UDP广播的小型局域网聊天室

    什么是UDP广播? 在了解其之前我们先了解一下什么是UDP协议,TCP协议也许大家已经知道,TCP协议主要是用于建立可靠的数据传输连接,而UDP(UserDatagramProtocol,用户数据包协议)与TCP协议之间的不同在于UDP不是一种基于稳定连接的通讯协议.UDP协议将独立的数据包从一台计算机传输到另外一台计算机,但是并不保证接受方能够接收到该数据包,也不保证接收方所接收到的数据和发送方所发送的数据在内容和顺序上是完全一致的.因此,UDP协议更类似于普通邮政服务,寄信人不能够保证所寄出

    网络编程March 22

  • 突破select的FD_SETSIZE限制

    前言: 在很多比较各种网络模型的文章中,但凡提到select模型时,都会说select受限于轮询的套接字数量,这个数量也就是系统头文件中定义的FD_SETSIZE值(例如64).但事实上这个算不上真的限制. C语言的偏方: 在C语言的世界里存在一个关于结构体的偏门技巧,例如: typedef struct _str_type { int _len; char _s[1]; }str_type; str_type用于保存字符串(我只是举例,事实上这个结构体没什么用处),乍看上去str_type只能

    网络编程March 20

  • 程序员,你调试过的最难的 Bug 是?

    伯乐在线导读:调试 Bug?每个程序员工作中必须品.在 Quora 上有一个和 Bug 相关的热门问答帖:<What's the hardest bug you've debugged?| 你调试过的最难 Bug 是?>.在众多回复中,Dave Baggett 的经历最让人惊叹,得到了 2400 多个顶.感谢@cugbabyebar的热心翻译. 回想起这个bug,仍然让我有些痛苦.作为一个程序员,在发现bug时,你学会了首先在自己代码中找问题,或许在测试一万次之后,你会把问题归咎于编译器.只有

    网络编程March 1

  • 深入理解Redis中的主键失效及其实现机制

    作为一种定期清理无效数据的重要机制,主键失效存在于大多数缓存系统中,Reids也不例外.在Redis提供的诸多命令中,EXPIRE.EXPIREAT.PEXPIRE.PEXPIREAT以及SETEX和PSETEX均可以用来设置一条Key-Value对的失效时间,而一条Key-Value对一旦被关联了失效时间就会在到期后自动删除(或者说变得无法访问更为准确).可以说,主键失效这个概念还是比较容易理解的,但是在具体实现到Redis中又是如何呢?最近本博主就对Redis中的主键失效机制产生了几个疑问,

    网络编程February 15

  • PHP获得上传文件的全路径名

    在PHP中选择或者上传文件时,用$_POST['filename']只能取得上传文件的文件名,但是不包含该文件所处的路径名,如果要取得文件的全路径名,就要用下列参数: php: •$_FILES["file"]["name"] - 被上传文件的名称 •$_FILES["file"]["type"] - 被上传文件的类型 •$_FILES["file"]["size"] - 被上传文件的大

    网络编程January 16

  • Java:Socket,TCP/IP,Http的区别

    1.TCP/IP分层 TCP/IP协议不是TCP/IP两个协议的合称,一般指的是因特网TCP/IP协议族. 从协议模型的分层方面,TCP/IP分为四层:数据链路层,网络层,传输层,应用层.IP位于网络层,TCP位于传输层,Http位于应用层. 1.链路层:负责接收IP数据包并通过网络发送,定义物理介质的各种特性.常见的接口层协议有X.25,Ethernet 802.3 2.网络层:负责相邻计算之间的通信.常见的网络层协议有IP协议,ICMP协议. 3.传输层:提供应用程序之间的通信.主要作用是格

    Java, 网络编程January 16

  • 经验谈:无线网关潜规则及开发建议

    作为腾讯无线的一名研发人员,我和我们的团队在开发和运营过程中碰到了一些有线网络环境碰不到的问题,也积累了一些经验,希望分享给大家. 我们经常碰到的网络问题都和网关有关,由于无线网关设备的供应商很多(华为,中兴,诺西等),难免存在不同的限制和规则,而且一旦发现问题,设备的更新速度也比较慢,但业务又需要快速调整,所以要想办法兼容这些规则. 首先对两个出现比较多的名词解释下: 接入点(apn):上网方式,常见的有cmwap,cmnet,ctwap,ctnet,3gnet,3gwap等. Wap网关:在

    网络编程December 29

  • SDN及云计算平台中的网络性能优化
    SDN及云计算平台中的网络性能优化

    你知道吗?当你部署IaaS云计算平台时,就已经在应用SDN了.你知道吗?云计算平台可以在vSwitch和physical Switch之间无缝切换.你知道吗?当前的云计算平台的网络部分有很大的优化空间.本文就带你了解这一切. 没有SDN,就没有云计算网络 SDN起源于校园网络,发扬光大于数据中 心.但现在看来很多人对后一句话并没有真正理解,如果你不服气,你能回答我这个问题吗:为什么说SDN很适合数据中心?我相信很多人对此都不甚了解.我这 么说有一个依据,因为工作的关系,我跟国内不少做云平台的技术

    网络编程December 26

  • 移除IIS默认的响应头
    移除IIS默认的响应头

    在IIS+ASP.NET的运行环境,默认情况下会输出以下的响应头(Response Headers): 那如何移除这些响应头呢?下面我们来一个一个移除. 1. 移除Server 借助IIS URL Rewrite Module,添加如下的重写规则: <rewrite> <allowedServerVariables> <add name="REMOTE_ADDR" /> </allowedServerVariables> <outb

    网络编程December 9

  • I/O模型--完成端口
    I/O模型--完成端口

    设计目的: 常见的网络通信分为两种:同步和异步. 在同步通信中,每一次接受数据都会导致主线程的挂起,从而阻塞住了其他操作.为了解决这一问题,我们通常会采取同步通信+多线程的策略,即为每一个连入的Socket分配一个线程.然而随着连入的Socket的数量的增加,线程的数量也在增加,这样CPU则需要不停地进行线程的切换,因此难以成为高性能的服务器程序. 异步通信则可以把接收数据这一操作交给内核,即在内核接收数据的时候,主线程可以不用被阻塞并且继续执行其他操作,而一旦接收数据完成以后,再由内核通知主线

    网络编程November 10

  • 又见KeepAlive
    又见KeepAlive

    我为什么要谈KeepAlive 最近工作中遇到一个问题,想把它记录下来,场景是这样的: 从上图可以看出,用户通过Client访问的是LVS的VIP, VIP后端挂载的RealServer是Nginx服务器. Client可以是浏览器也可以是一个客户端程序.一般情况下,这种架构不会出现问题,但是如果Client端把请求发送给Nginx,Nginx的后端需要一段时间才能返回结果,超过1分30秒就会有问题,使用LVS作为负载均衡设备看到的现象就是1分30秒之后, Client和Nginx链接被断开,没

    网络编程November 4

  • 不要把你的input元素设置为"action"或"submit"

    大多数的浏览器都有一个严格意义上来说不能算作bug的bug.实际上,浏览器的本意是让你的工作变得更简单,但是如果你(或者其他人)恰好以某种方式(其实是错误的方式)来写HTML代码的话,就会完全触发该问题.特别的,如果你指定input标签的id或者name属性值为"action"或"submit",你可能就会触发非常隐藏的bug. 关于该"Bug"的介绍 去年我通读了John Resig 和Bear Bibeault著作的<Secrets o

    网络编程October 25

  • 阻塞与非阻塞.同步与异步 I/O模型
    阻塞与非阻塞.同步与异步 I/O模型

    I/O模型 Linux 下的五种I/O模型 阻塞I/O(blocking I/O) 非阻塞I/O (nonblocking I/O) I/O复用(select 和poll) (I/O multiplexing) 信号驱动I/O (signal driven I/O (SIGIO)) 异步I/O (asynchronous I/O (the POSIX aio_functions)) 前四种都是同步,只有最后一种才是异步IO. Winsock的异步IO模型有下面六种 select选择模型 WSAA

    网络编程October 8

  • 斯坦福大学发布免费在线文本分析工具

    斯坦福计算机科学家开发了etcML(Easy Text Classification with Machine Learning)网站,该网站通过机器学习引擎进行文本分析,目前该网站向所有人免费开放. 斯坦福大学官网对此进行了说明:etcML网站基于成熟的文本分析引擎,估计总体的情感倾向(是消极还是积极).etcML项目负责人Richard Socher表示: "我们想开发一套供普通人和研究人员使用的标准的机器学习技术,所有使用者都不需要编程能力." 斯坦福大学候选博士研究生Rebec

    网络编程September 27

  • 互联网化,汽车后市场准备好了吗?

    互联网会给汽车带来什么?在"汽车上线"专题中,我们对整车上线做出了特别报道.但相较于前车市场,后车市场的互联网化价值更大,这是一个缺乏标准化.格局混乱且更具潜力的市场. 网络售车近几年在各大平台都创造了惊人的成绩,已经证实在互联网的作用下,整车销售已经在线上形成了独特而强大的交易链条.受鼓舞的不仅仅是整车市场,潜在体量更为庞大的汽车后市场也在互联网思维的触动下意欲勃发. 的确,相较于标准化的前车市场,后市场的复杂现状更需要互联网的介入来改变这种混乱局面,但是,也正是因为缺乏标准化,汽车

    网络编程August 5

  • 多线程异步非阻塞C语言爬虫
    多线程异步非阻塞C语言爬虫

    最近用C写了个爬虫,纯属练习,离实用还相差甚远. bloom.h实现布隆过滤器算法.对一条url拆分为domain和path两部分,bloomDomain函数判断domain是否出现过,bloomPath函数判断path是否出现过.如果domain未出现过,则要先进行DNS解析(解析之后把domain和ip对存入map),再下载网页:如果domain出现过,则不需要再进行DNS解析,此时如果path也出现过,则该url直接忽略:如果是新的url,需要放入queue. 下载源码:ISeeSpide

    网络编程July 26

  • system调用导致子进程socket句柄泄漏问题分析

    在关于fork和行缓冲的问题中讨论了fork的一些特性,堆栈复制,确切的说是'写时复制'.这篇将讨论资源的复制问题. 问题引出:A进程与B进程各自独立,都是服务器进程,常驻系统,互不相干.在某次重启A进程后,发现由于固定监听的端口被占用而无法启动.检查,发现是B进程占用了该端口,检查B进程代码,没有相关的打开该固定端口和打开随机端口的动作.问题百思不得其解. 最终,发现B进程不只是占用了该固定端口,还打开了很多本该只有A进程才会打开的句柄资源.很快联想到A是B的子进程,B是A fork之后在子进

    网络编程July 13

  • iOS网络高级编程:iPhone和iPad的企业应用开发之错误处理
    iOS网络高级编程:iPhone和iPad的企业应用开发之错误处理

    本章内容 ● iOS应用中的网络错误源 ● 检测网络的可达性 ● 错误处理的经验法则 ● 处理网络错误的设计模式 到目前为止,我们所介绍的iPhone与其他系统的网络交互都是基于一切正常这个假设.本章将会放弃这个假设,并深入探究网络的真实世界.在真实世界中,事情是会出错的,有时可能是非常严重的错误:手机进入与离开网络.包丢掉或是延迟:网络基础设施出错:偶尔用户还会出错.如果一切正常,那么编写iOS应用就会简单不少,不过遗憾的是现实并非如此.本章将会探讨导致网络操作失败的几个因素,介绍系统如何将失

    iphone, android, ipad, ios, 移动开发, 网络编程July 10

  • android网络编程--使用Android中的网络连接

    网络编程在无线应用程序开发过程中起到了重要的作用.Android包括Apache HttpClient库,此库为执行Android中的网络操作之首选方法.Android还可允许通过标准的Java联网API(java.net包)来访问网络.即便使用Java.net包,也是在内部使用该Apache库. 为了访问互联网,你的应用程序需要获取"android.permission.INTERNET"权限 Android中与网络相关的包 以下内容为Android SDK中与网络相关的部分包 •

    android, 网络编程, HttpJuly 9

  • 常用服务器模型总结

    UNPv3上一共总结了9种服务器模型分别是: 1.迭代服务器 2.并发服务器,为每个客户fork一个进程 3.预先派生子进程,每个子进程都调用accept,accept无上锁保护 4.预先派生子进程,以文件锁的方式保护accept 5.预先派生子进程,以线程互斥锁上锁的方式保护accept 6.预先派生子进程,由父进程向子进程传递套接口描述字 7.并发服务器,为每个客户请求创建一个线程 8.预先创建线程,以互斥锁上锁方式保护accept 9.预先创建线程,由主线程调用accept,并把每个客户连

    tcp, 网络编程, socket, 服务端June 28

  • iOS的socket开发基础
    iOS的socket开发基础

    socket简介 首先让我们通过一张图知道socket在哪里? Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口. tcp和udp的区别 在这里就必须讲一下udp和tcp的区别了 TCP:面向连接.传输可靠(保证数据正确性,保证数据顺序).用于传输大量数据(流模式).速度慢,建立连接需要开销较多(时间,系统资源). UDP:面向非连接.传输不可靠.用于传输少量数据(数据包模式).速度快. 关于TCP是一种流模式的协议,UDP是一种数据报模式的协议,这里要说明一下,TCP

    网络编程May 20

  • 5种服务器网络编程模型讲解
    5种服务器网络编程模型讲解

    1.同步阻塞迭代模型 同步阻塞迭代模型是最简单的一种IO模型. 其核心代码如下: 1 2 3 4 5 6 7 8 bind(srvfd); listen(srvfd); for(;;){ clifd = accept(srvfd,...); //开始接受客户端来的连接 read(clifd,buf,...); //从客户端读取数据 dosomthingonbuf(buf); write(clifd,buf)//发送数据到客户端 } 上面的程序存在如下一些弊端: 1)如果没有客户端的连接请求,进程

    网络编程May 14

  • Redis中slowlog机制实现源码分析

    Slowlog是Redis从2.2.12版本引入的一条命令,用于查询和重置Redis内部维护的慢查询日志,其中每条日志的内容均由四部分组成:1)慢查询日志Id,该Id对于每条日志来说都是唯一的:2)慢查询日志被记录的Unix时间戳:3)慢查询的执行时间,以微秒计:4)查询本身,包括命令以及一系列参数. 需要说明的是,所谓慢查询指的就是内部执行时间超过某个指定时限的查询,而控制该指定时限的就是Redis配置文件中的配置项slowlog-log-slower-than.除了slowlog-log-s

    网络编程May 12

  • 发布一个参考tornado的高性能c++网络库:libtnet

    libtnet是一个用c++编写的高性能网络库,它在设计上面主要参考tornado,为服务端网络编程提供简洁而高效的接口,非常易于使用. Echo Server void onConnEvent(const ConnectionPtr_t& conn, ConnEvent event, const void* context) { switch(event) { case Conn_ReadEvent: { const StackBuffer* buffer = static_cast<co

    tornado, 网络编程, 高性能May 11

  • 计划给 skynet 增加短连接的支持

    不基于一个稳定 TCP 连接的做法,在 web game 中很常见.这种做法多基于 http 协议.以适合在浏览器中应用. 运行在移动网络上的游戏,网络条件比传统网络游戏差的多.玩家更可能在游戏进行中突然连接断开而导致非自愿的登出游戏.前段时间,我实现了一个库来帮助缓解这个问题. 如果业务逻辑基于短连接来实现,那么也就不必这么麻烦.但是缺点也是很明显的: 每对请求回应都是独立的,所以请求的次序是不保证的. 服务器向客户端推送变得很麻烦,往往需要客户端定期提起请求. 安全更难保证,往往需要用一个

    网络编程April 18

  • FutureTask 源码解析
    FutureTask 源码解析

    站在使用者的角度,future是一个经常在多线程环境下使用的Runnable,使用它的好处有两个: 1. 线程执行结果带有返回值 2. 提供了一个线程超时的功能,超过超时时间抛出异常后返回. 那,怎么实现future这种超时控制呢?来看看代码: FutureTask的实现只是依赖了一个内部类Sync实现的,Sync是AQS (AbstractQueuedSynchronizer)的子类,这个类承担了所有future的功能,AbstractQueuedSynchronizer的作者是大名鼎鼎的并发

    网络编程April 17

  • 学之者生,用之者死--ACE历史与简评
    学之者生,用之者死--ACE历史与简评

    ACE 是现代面向对象网络编程的鼻祖,确立了许多重要模式,如 Reactor.Acceptor 等,重要到我们甚至觉得网络编程就应该是那样的.但为什么 ACE 叫好不叫座?大名鼎鼎却使用者寥寥?本文谈谈我的个人观点. ACE 是一套重量级的 C++ 网络库,早期版本由 Douglas Schmidt 独自开发,后来有 40 余名学生与工作人员也贡献了大量代码.作者 Douglas Schmidt 凭借它发表了 30 余篇学术论文.ACE 的一大特点是融合了 Douglas Schmidt 提出的

    网络编程March 28

  • 在移动网络上创建更稳定的连接

    我们的手机游戏发布有一段时间了.立项之前我写的一篇 blog, 在移动设备上开发游戏需要克服的两大技术难点: 移动网络的不稳定性以及手机硬件资源的约束.由于开发时间所限,第一点我们并没有专门去做. 我一直不想动手去做一个临时方案解决 TCP 断线重连问题,因为实现一个 TCP over TCP 是没有太大意义的.移动网络发展迅速的今天,整个行业都在努力提高移动网络的稳定性,所以费力做这个事情很可能在两年之后就变得完全没有必要. 比如,iOS 7.0 发布后,让MultiPath TCP技术为更多

    网络编程March 14

  • [linux下c语言服务器开发系列6]客户端_多进程_压力测试

    上篇博客写了一个聊天室的服务器.只能用telnet来测试是否好用.于是,写了一个客户端来进行压力测试.看看服务器能给多少client服务. 客户端的主要作用是,fork多个进程,给服务器随机发送文本内容,服务器收到客户端的内容后,转发给其他所有的客户端. 测试了一下,客户端开1000个进程,与服务器段进行交互,发现只有400个进程有发送和回复的内容,其余的进程都没有.目前还不知道原因.貌似是服务器过载了? 下面是这个客户端的部分代码: 创建指定数量的进程,每个进程都调用runchild()函数来

    linux, c语言, 多进程, 网络编程, 压力测试, 复用, 服务器编程November 3

  • [linux下c语言服务器开发系列4]IO复用[select and epoll函数的使用]

    前言 服务器的重要作用是对多种外部事件或者请求作出反应.对于多个外部请求,可以通过多进程进行处理,即每来一个连接,我就fork一个子进程,用这个子进程专门针对这个请求进行处理,包括读写操作,与其他进程通讯,有数据库打交道等.这种方式是多个进程并行进行处理.但是,并行的程序,由于需要fork子进程,进行进程管理.进程切换等,需要耗费较多的资源,是否有串行的方式解决这个问题呢?有,那就是IO复用.IO复用是把所有需要进行处理的IO的读写注册成事件,如果哪个IO可以读写了,就触发相应的事件,通过复用函

    linux, c语言, 网络编程, 服务器编程October 23

  • [linux下c语言服务器开发系列3]进程间通讯

    上个博文说道,信号是在进程间通讯的的一种方式.例如子进程执行结束后,向父进程发送sigchld信号,父进程就通过捕获这个信号,就可以对子进程的资源进行回收,避免其成为僵尸进程. 进程间通信的另外一种方式是管道,主要是在父子进程间.父进程通过创立一个管道,fork()出子进程后,子进程继承父进程的管道,从而,父子进程就形成了管道的两端,从而可以靠这两端,进行父子进程之间的通信. 创建管道 创建管道的方法主要有两种,一种是pipe函数,可以man一下,解释很清晰的:另外一种是socketpair函数

    linux, c语言, 网络编程, 服务器编程October 23

  • [linux下c语言服务器开发系列2]多进程回射服务器带信号处理

    上篇文章提供了一个服务器可以多进程的处理客户端的请求的例子.但上个例子存在不少问题,比如业务逻辑处理部分特别杂乱,父进程没有对子进程的资源进行回收导致僵尸进程的存在.这些问题,均在本篇文章的例子中得到了解决. 对于业务处理部分的逻辑杂乱问题,我提供了一个dowork()函数,里面封装了所有的用户逻辑,即如果你想实现成一个回射服务器,就在这个函数中写你的需求就行,如果想实现成http.ftp等协议,也是在这个函数里写.这样,这个函数就比较具有通用性了.当然了,如果想实现功能复杂的服务器,不可能只靠

    linux, c语言, 网络编程, 服务器编程October 18

  • [linux下c语言服务器开发系列1]多进程处理多客户端的连接

    在上文中,提供了一个十分简单的回射服务器的demo,但是,这个demo的作用十分有限,只能接收一个客户端的连接,然后和其建立联系,进行通讯.等这个客户端断开连接后,才能处理另外的连接.功能太弱了.因为我们之前学过多进程程序设计,所以,这里提供一个回射服务器的多进程版本,使之能够同时处理多个客户端的连接. 多进程主要是靠fork函数来完成的,他是一个特殊函数,一次调用,两次返回.如果返回大于0,表示是父进程,同时返回值表示了他的子进程的pid.返回值如果等于0,表示他是一个子进程.子进程是父进程的

    linux, c语言, 多进程, 网络编程, 服务器编程October 17

  • [linux下c语言服务器开发系列] 开篇(socket的基本操作)

    对于linux下c语言的编程,尤其是网络编程这部分,还是有一些莫名的爱好的.学习了一些东西,如果不加以总结和实际操作,往往容易忘了.所以,在此写个系列的博客,记录一下,从零开始写linux下的服务器编程.希望看到这篇日志的同学,多提意见,共同学习. 对于网络编程,主要是对socket和IO进行操作.为了实现高效通讯,需要一些策略,后面会介绍到.作为开篇,主要是对socket的基础操作的讲解. socket本质上就是一个int的数字,文件描述符,用于标识主机间端到端的通讯.两端的主机,通过对该so

    linux, c语言, 网络编程, 服务器编程October 17

  • Linux网络编程入门(转)

    (一)Linux网络编程--网络知识介绍 Linux网络编程--网络知识介绍 客户端和服务端 网络程序和普通的程序有一个最大的区别是网络程序是由两个部分组成的--客户端和服务器端. 客户端 在网络程序中,如果一个程序主动和外面的程序通信,那么我们把这个程序称为客户端程序. 比如我们使用ftp程序从另外一 个地方获取文件的时候,是我们的ftp程序主动同外面进行通信(获取文件), 所以这个地方我们的ftp程序就是客户端程序. 服务端 和客户端相对应的程序即为服务端程序.被动的等待外面的程序来和自己通

    linux, 网络编程October 11

  • Python 实现 socket 通讯 (TCP/UDP)

    1. TCP 1.1 TCP-Server # -*- coding: utf-8 -*- # TCP-Server import socket # 1. 创建 socket 对象 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 2. 将 socket 绑定到指定地址 address = ('127.0.0.1', 10140) s.bind(address) # 3. 接收连接请求 s.listen(5) # 4. 等待客户请求一

    python, tcp, udp, 网络编程August 28

  • python核心编程--第十六章

    16.2 套接字:通讯端点 16.2.1 什么是套接字? 套接字是一种具有之前所说的"通讯端点"概念的计算机网络数据结构,网络化的应用程序在开始任何通讯之前都必须创建套接字.就像电话的插口一样,没有它就完全没办法通讯. 基于文件型的套接字:由于两个进程都运行在同一台机器上,而且这些套接字是基于文件的,所以它们的底层结构是由文件系统来支持的.这样做相当有道理,因为,同一台电脑上,文件系统的确是不同的进程都能访问的. 基于网络的套接字:家族名为:AF_INET 16.2.2 套接字地址:主

    网络编程, python核心编程June 21

  • Socket 错误分析及错误码

    平台:xp sp3+vc6. 测试方法: retval = function(....) if(retval == SOCKET_ERROR) r = WSAGetLastError(); 各种情况下的返回值由retval取得. 错误号由r取得. 错误查询使用vc6自带的tool:"Error Lookup" 1.socket SOCKET socket( int af , int type , int protocol ); >>af,通常为AF_INET 使用AF_IS

    网络编程, socket, web编程April 17

  • 魔兽世界私服Trinity,从源码开始 - 少即是多 - 专注
    魔兽世界私服Trinity,从源码开始 - 少即是多 - 专注

    [转自]http://log4think.com/setup_wow_private_server/ 2010-01-29 16:07:00 [com.log4think]-[WARN] stay hungry, stay foolish ... Browse: Home / 魔兽世界私服Trinity,从源码开始 魔兽世界私服Trinity,从源码开始 缘起因由 在一个无所事事的周末下午,突然想起魔兽世界,官方的账号很久没有上了,里面的大小号现在连满级都不是.以前曾经搭过传奇和星际争霸战网的私

    mmorpg, 网络编程, 游戏服务器March 10

  • linux网络编程(转)

    0. 基本的C++编程基础, win/linux应用程序的编程基础. 熟悉常见数据库操作(如mysql,oracle等). 1. 精通多线程开发(并发编程: 锁,无锁编程等),多进程通信, 精通网络编程, 精通套接字模型, 熟悉epoll,熟悉iocp, 熟悉io/逻辑处理的2种方式( 一种accept后,唤醒别人继续监听, 自己处理client, 一种accept后, 唤醒别人去处理client,自己继续监听), 2. 熟悉3个池类技术(内存池, 线程池, 连接池). 3. 熟悉消息封包解包

    网络编程November 22

  • Reachability 网络编程总结(解析数据,下载文件,确认网络环境)
    Reachability 网络编程总结(解析数据,下载文件,确认网络环境)

    文章来自:http://www.cocoachina.com/bbs/read.php?tid-31300.html 敬请原谅标题的原创. 一:确认网络环境3G/WIFI 1. 添加源文件和framework 开发Web等网络应用程序的时候,需要确认网络环境,连接情况等信息.如果没有处理它们,是不会通过Apple的审(我们的)查的. Apple 的 例程 Reachability 中介绍了取得/检测网络状态的方法.要在应用程序程序中使用Reachability,首先要完成如下两部: 1.1. 添

    reachability, 网络编程, 确认, 网络环境September 24

  • RMI 入门
    RMI 入门

    RMI全称是Remote Method Invocation-远程方法调用,Java RMI在JDK1.1中实现的,其威力就体现在它强大的开发分布式网络应用的能力上,是纯Java的网络分布式应用系统的核心解决方案之一.其实它可以被看作是RPC的Java版本.但是传统RPC并不能很好地应用于分布式对象系统.而Java RMI 则支持存储于不同地址空间的程序级对象之间彼此进行通信,实现远程对象之间的无缝远程调用. RMI目前使用Java远程消息交换协议JRMP(Java Remote Messagi

    rmi, Java, 网络编程September 11

  • android的网络编程

    android的网络编程分为2种:基于socket的,和基于http协议的. 基于socket的用法 服务器端: 先启动一个服务器端的socket ServerSocket svr = new ServerSocket(8989); 开始侦听请求 Socket s = svr.accept(); 取得输入和输出 DataInputStream dis = new DataInputStream(s.getInputStream()); DataOutputStream dos = new Dat

    android, 网络编程September 6

  • I/O多路复用之select
    I/O多路复用之select

    select的功能可以用一句话来描述: 实现基于I/O多路复用的异步并发编程. 在具体讲解select之前我们先看看常规的阻塞socket编程方式,以服务端为例: 对于这种方式,最大的问题在哪里呢?accept和recev的阻塞调用!下面以两种场景为例,来说明相比这种情况,select是如何做到异步I/O多路复用的高效性. 第一种场景: server除了要对外响应client的服务外,还要能够接受标准输入的命令来进行管理. 假如使用上述阻塞方式,在单线程中,accept调用和read调用必定有先

    select, 网络编程, 并发, 高性能, I/O多路复用June 27

  • Linux Epoll介绍和程序实例[转]

    原址是 http://blog.csdn.net/sparkliang/article/details/4770655 原来的代码有些小bug,修改了贴在下面. 另外一篇参考地址 http://hi.baidu.com/jrckkyy/blog/item/8fbfa23856f497feb311c7c3.html // // a simple echo server using epoll in linux // // 2009-11-05 // by sparkling // #include

    epoll, 网络编程, 高并发April 19

  • [网络编程]大端模式和小端模式(大头序和小头序)

    大端:多字节值的大端存储在该值的起始位置:(老大站排头为大) 小端:多字节值的小端存储在该值的起始位置:(老小站排头为小) 例如16bit整数:0x0102,其中01即为多字节值的大端,02即为多字节值的小端. 在网络中传输的都是大端序,但具体到某台主机CPU的实现,则有可能是大端序也可能是小端序.一般X86是小端. 那么,如何通过程序来判断当前主机到底是大端还是小端呢? /*判断大端还是小端, 1:小端 0:大端*/ int GetEndian() { union { int a; char

    C/C++, 网络编程, 大端, 小端December 14

  • [网络编程]域名解析

    项目中有这种场景:C/S通过RPC方式通信.服务端提供一个域名(如:www.xxx.xxx.com),客户端每次请求需要将该域名转换成相应的IP,然后才可以发起请求.这里做一个小小的总结. #include <stdio.h> #include <unistd.h> #include <netdb.h> #include <arpa/inet.h> #include <errno.h> int main(int argc, char *argv[

    gethostbyname, C/C++, 网络编程December 14