waterinfire

2007年5月11日

学习网络编程的十个步骤
    经过多年的网络编程实践之后,个人觉得初学网络编程者可以从以下几个步骤开展:

    1)下载一个可以互动的学习工具,通过这个与这个工具互动,我们可以及时的学到每个api的结果如果。我个人强烈推荐一个互动好工具,即python,下载地址http://www.python.org 对于有c/c++或java基础的朋友通过一两个礼拜的时间就可以上手了,另外个人建议初学者可以学习dive into python。
      
    2)掌握网络编程中会用到的几个基本概念和内涵,比如IP地址,port号,socket等

    3)记住和消化网络编程C/S模型,把server和client端编程的常用模式理解和消化

    4)花几天时间学习socket api集,api集可以分为下面几大类:
       创建   socket bind listen accept
       收发   read/recv/recvfrom  write/send/sendto  
       关闭   close shutdown
       参数   getsockopt/setsockopt
       地址   gethostbyaddr getaddrbyhost,...

       在学习这些api时候,可以先关注在函数功能,参数意义上

    5)结合python互动平台,实践socket api的用法,比如socket函数怎么使用,bind怎么使用等等。在互动过程中,我们可以变换参数,看看调用结果如何。比如,
       创建一个tcp socket的语法如下:
       socket(AF_INET,SOCK_STREAM)

       创建一个udp socket的语法如下:
       socket(AF_INET,SOCK_DGRAM)

    6)学习socket server端编程实现简单规约比如echo,time等,然后通过cmd中的telnet来测试。

    7)学习I/O模型,比如阻塞、非阻塞和反应式(select,poll,WaitForMultipleObject)等

    8)学习Richard Stevens的《Unix网络编程》,深入学习其中的api原理以及服务端设计原理,并通过代码编写。

    9)下载高性能网络编程框架twisted,笔者强烈推荐,它将使你的网络编程效率提高10倍以上。

    10)学习设计模式、操作系统知识比如线程、进程、同步等。
posted @ 2007-05-11 16:14 程序员看世界 阅读(31951) | 评论 (8) | 编辑 收藏
 

2007年4月6日

高速学习socket编程的10个步骤

   socket编程不比单机编程,它至少涉及两个角色即客户端和服务端,在socket的运行中由于它涉及了网络上的n多设备,只要其中的一个设备有问题,就会可能导致程序出问题。
   
   作为初学网络编程的程序员来说,我们应该怎么高效地学习网络呢?经过个人几年的学习和实践,我觉得要进行高效的网络编程学习,可以有以下是个步骤:

   1)马上到www.python.org下下载python,然后花2~3天时间学习基本的python语法。
      python是一门优秀的脚本语言,易学易用。这里是一篇为什么要选择python的文章,读者朋友可以参看。
      我个人觉得最重要的是在python,我们可以通过交互式来学习网络编程,你敲一个命令就可以马上获得该命令的反应。如果一开始就用c/c++或者java来学习网络编程的话,那将是非常让我泄气的,因为你必须解决编译、链接等问题。

2)学习C/S交互模型,具体来说客户端的编程模型是怎样的,服务端模型又是怎样的,然后把该模型彻底消化成自己的语言。

3)学习socket的api,并且在python下不断练习。

4)和一位同道者结成学习小组,大家共同学习网络编程。比如在一段时间一个人编写客户端,另一个编写服务端;再过一段时间,换一下角色;

5)参加网上讨论组,比如google上的高性能网络编程组。

(待续)

posted @ 2007-04-06 17:02 程序员看世界 阅读(7280) | 评论 (4) | 编辑 收藏
 

2007年3月23日

linux获得线程信息的办法

在linux中,我们可以通过以下命令获得目前使用的thread版本:

 getconf GNU_LIBPTHREAD_VERSION

 比如在我的RedHad平台上,得到以下输出:
  NPTL 0.60

  另外我们还可以通过以下命令获得更多的关于线程的信息:
   1) ldd /bin/ls | grep libc.so.6
   输出:
           libc.so.6 => /lib/tls/libc.so.6 (0xb749a000)

   2) /lib/tls/libc.so.6
   输出:

GNU C Library stable release version 2.3.2, by Roland McGrath et al.
Copyright (C) 2003 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.
Compiled by GNU CC version 3.2.3 20030502 (Red Hat Linux 3.2.3-20).
Compiled on a Linux 2.4.20 system on 2003-10-02.
Available extensions:
        GNU libio by Per Bothner
        crypt add-on version 2.1 by Michael Glad and others
        NPTL 0.60 by Ulrich Drepper
        RT using linux kernel aio
        The C stubs add-on version 2.1.2.
        BIND-8.2.3-T5B
        NIS(YP)/NIS+ NSS modules 0.19 by Thorsten Kukuk
        Glibc-2.0 compatibility add-on by Cristian Gafton
Thread-local storage support included.
Report bugs using the `glibcbug' script to <bugs@gnu.org>.

posted @ 2007-03-23 12:46 程序员看世界 阅读(983) | 评论 (0) | 编辑 收藏
 

2007年3月12日

超级电子书基地
   最近本人在网上找到一个超级庞大的电子书基地,里面你几乎可以找到你想学习的任何编程知识,比如操作系统、数据库、语言(C#,Java,Php等)、设计等。

   www.flazx.com

  
posted @ 2007-03-12 21:33 程序员看世界 阅读(1441) | 评论 (2) | 编辑 收藏
 

2007年3月11日

从“模式转变”说起?
   “我们怎样才能变得效率更高?我发现,如果你希望慢慢地,逐步地提高,改变你的态度和行为,你就能做到这一点。但是,如果你想以快速的方式——我的意思是说,以剧烈的、革命性的、转型性的方式——如果你想发生量子级的提高,不论是个人还是组织,你都要改变你的参照模式。
      改变你对世界的看法,你对人的看法,你对管理和领导的看法。改变你的模式,改变你理解和解释现实某些方面的方法。最大的突破就是打破旧的思考方式。”

   以上段落引自美国牛人斯蒂芬.柯维。

   作为在亭子间来来往往的程序员,我们何尝不想提高我们的工作效率,提升我们的编程水平。但是经过了n个项目的磨练,n行代码的编写之后,为什么我们的编程水平不见大幅度提高或者发生量子级跃迁呢?

   在经过几年的项目磨练之后,我们的编程水平毫无疑问会有所进展,我们的分析、设计和思考能力当然也会有所进步。但是到了一定阶段之后,就会感觉达到了自己能力的瓶颈,每天、每月、每年似乎能在重复做着同一个水平线上的工作,只要工作要求超过此水平线,就会感觉自己无从下手。就像电子的能级一样,只能在同一个能级上飞来飞去,而不能跃迁到一个高的能级。

   诚如斯蒂芬所言,“如果你想发生量子级的提高,你要改变你的参照模式。你对人的看法,你对管理和领导的看法。改变你的模式。”如果我们感觉自己每天工作也非常能力,学习也挺卖力,做得项目也不少,但是如果你自我感觉不好的话。那么我们就要观照一下自己的模式,思考人生、社会和宇宙的模式,很有可能是我们自己思考的模式出现了问题。

   
   

posted @ 2007-03-11 22:14 程序员看世界 阅读(1095) | 评论 (3) | 编辑 收藏
 

2007年3月8日

Unix调试指导书
AIX:http://www.unet.univie.ac.at/aix/aixprggd/genprogc/toc.htm

posted @ 2007-03-08 22:13 程序员看世界 阅读(1157) | 评论 (0) | 编辑 收藏
 
精灵是怎样炼成的?

      许多程序员说精灵(daemon)不是魔鬼(demon)。即使有时似乎象魔鬼,但你的服务器是不会由魔鬼控制的(或许你的某些用户会由魔鬼控制,但你的服务器不会)。

      我们把精灵定义为一个在后台运行的程序,用于管理系统的各个功能。该词的字面意思是“介乎神与人的精灵”。诗人威廉.巴特勒.耶茨很喜欢该词的意喻及其对现实二重性的表达。他以人来看待精灵,用精灵来表达人性的另一面。你不会明白,魔鬼不存在该有多好!例如,你怎么知道你这块馅饼是大的?除非你曾有一块比这小的。

     事实上,精灵这个术语源自希腊神话。古希腊人称精灵为超人,它充当神与人之间的仲裁者。这是Unix精灵为你所做的一切的最准确描述。实际上,精灵始终呆在后台随时等待调用去执行某些服务。系统上运行的某些精灵执行系统指定的每项服务。但,请不要混淆精灵和进程这两个术语。
    
    既然精灵介于神人之间,那么人有没有可能变成精灵呢?

    在unix的世界中,一般的进程能变成精灵进程吗?答案是肯定的,下面我们就一步一步揭开人到精灵的进化过程。

   决裂阶段:
   在这个阶段,我们必须脱离父母的怀抱,走向自己的新天地
   
   /* 父母创造了我们
   if(fork() > 0) {
      /* 父母给了我们自由 */
      exit(0);
   }

   创造阶段:
   父母给我们自由身,我们可以创造自己的新天地。为了将来美好的未来,我们要做三件事情:
   1)创造新的会话期,我们成为会话期的领导
   2)创造新的组织(进程组),我们自己成为该组的组长
   3)我们脱离终端的控制
   setsid();

   升华阶段:

   “上善若水,水善利万物而不争。处众人之所恶,故几于道。”,作为精灵的候选人,创造了自己的组织之后,不能再以组长自居,而应把自己当成普通人。
   
   signal(SIGHUP,SIG_IGN);
   if(fork()>0){
      /*毁灭原身*/
      exit(0);
   }

   返璞归真:

   chdir("/");
   umask(0);
   for(i=0;i<64;++i)
   {
      close(i);
   }

   圆满阶段:
   经过以上各个修炼阶段,在此为止我们已经具备了精灵的各个条件。但是以上很不够,作为一个精灵,最主要的还是我们毛主席那句话:“为人民服务”。

   我们应该在这个阶段把我们要做的事启动起来,做以下事情:

   int service()
   {
      /* 有什么要求 */
      data = getIncomingRequest();

      /* 为人民服务 */
      result  = processRequest(data)

      /* 对人民的所求有个交代 */
      sendResponse(result);
   }


   

posted @ 2007-03-08 21:16 程序员看世界 阅读(1139) | 评论 (2) | 编辑 收藏
 

2007年3月7日

介绍FileMon和Regmon的好文章

http://download.microsoft.com/download/0/1/3/01381C25-72DA-4AA9-B792-43E02A243C71/SVR333_Russinovich_Solomon.ppt
posted @ 2007-03-07 22:01 程序员看世界 阅读(646) | 评论 (0) | 编辑 收藏
 
怎样把代码从unix移植到windows
看看:

http://www.microsoft.com/downloads/details.aspx?familyid=6224464a-31aa-42d1-ae0b-dd9b5713b928&displaylang=en&Hash=sYjUTuHJ1seLbY4hHLsEByNWlpud7KKOVvMBDFF8Mdz42aCFbMxFK3ADx1F307uFvCoHZZ3AmnA6fQ90ILvmAg%3d%3d

posted @ 2007-03-07 21:26 程序员看世界 阅读(1330) | 评论 (0) | 编辑 收藏
 

2007年2月14日

twisted的学习资料
    twisted是个非常非常优秀的高性能网络编程框架,通过它可以以“闪电”般地速度开发出高性能、高质量的网络服务器,具体可见其网址:http://www.twistedmatrix.com.

    虽然twisted是个非常好的开发框架,但关于它的学习资料相对比较少。这给学习者的学习带来了不少在阻碍,通过笔者平时的上网搜索,获得了以下一些资料和大家分享:


   
    使用 Twisted 框架进行网络编程
  •     http://www.ibm.com/developerworks/cn/linux/network/l-twist/part1/
  •     http://www.ibm.com/developerworks/cn/linux/network/l-twist/part2/
  •     http://www.ibm.com/developerworks/cn/linux/network/l-twist/part3/
  •     http://www.ibm.com/developerworks/cn/linux/network/l-twist/part4/
    《Twisted Network Programming Essentials》
    http://www.sec168.com/blog/blogsec/gashero/archives/2006/23.html
    http://safari.oreilly.com/0596100329
    http://www.oreilly.com/catalog/twistedadn/

    Twisted模式
    http://www.rexx.com/~dkuhlman/twisted_patterns.html

    Twisted与线程
    http://kaishaku.org/twisted-vs-threads/

    The Twisted Network Framework
    http://www.python10.org/p10-papers/09/index.htm

    Twisted defer
    http://python.fyxm.net/pycon/papers/deferex/

    在Windows下制作和部署twisted程序
    http://www.adelux.fr/libre/howto/en/twisted_windows

    Twisted批判者
    http://laurentszyster.be/blog/labeling-the-twisted-bits/

    啄木鸟社区
    http://wiki.woodpecker.org.cn/moin/PyTwisted

    Event-Driven Programming with Twisted and Python
    http://www.linuxjournal.com/node/7871/print

    An Introduction to the Twisted Networking Framework
    http://www.onlamp.com/pub/a/python/2004/01/15/twisted_intro.html

    ASPN上twisted例子
             http://aspn.activestate.com/ASPN/search?query=twisted&x=0&y=0&section=PYTHONCKBK&type=Subsection

    Network Programming for the Rest of Us    http://www.usenix.org/events/usenix03/tech/freenix03/full_papers/lefkowitz/lefkowitz_html/index.html

    Twisted WEB测试
    http://agiletesting.blogspot.com/2005/02/web-app-testing-with-python-part-1.html
    http://agiletesting.blogspot.com/2005/03/web-app-testing-with-python-part-2.html
posted @ 2007-02-14 10:10 程序员看世界 阅读(2547) | 评论 (0) | 编辑 收藏
 
仅列出标题  下一页
 
<2025年5月>
日一二三四五六
27282930123
45678910
11121314151617
18192021222324
25262728293031
1234567

 导航

  • C++博客
  • 首页
  • 发新随笔
  • 发新文章
  • 联系
  • 聚合
  • 管理

 统计

  • 随笔: 17
  • 文章: 1
  • 评论: 25
  • 引用: 0

常用链接

  • 我的随笔
  • 我的评论
  • 我参与的随笔

留言簿(4)

  • 给我留言
  • 查看公开留言
  • 查看私人留言

随笔分类

  • 程序生活(13) (rss)
  • 集成通信(1) (rss)

随笔档案

  • 2007年5月 (1)
  • 2007年4月 (1)
  • 2007年3月 (7)
  • 2007年2月 (1)
  • 2007年1月 (7)

文章档案

  • 2007年1月 (1)

收藏夹

  • 思考者(16) (rss)

搜索

  •  

最新评论

  • 1. re: 学习网络编程的十个步骤[未登录]
  • 但是这样不就是用Python做网络编程了吗?
  • --a
  • 2. re: 学习网络编程的十个步骤[未登录]
  • <big style="font-size=100px;">well done</big>
  • --d
  • 3. re: 学习网络编程的十个步骤[未登录]
  • 大师赠言,受教啦
  • --sky
  • 4. re: 高速学习socket编程的10个步骤
  • I 服了 YOU
  • --safd
  • 5. re: 高速学习socket编程的10个步骤
  • 败了!!!!
  • --~·~

阅读排行榜

  • 1. 学习网络编程的十个步骤(31951)
  • 2. 高速学习socket编程的10个步骤(7280)
  • 3. twisted的学习资料(2547)
  • 4. 超级电子书基地(1441)
  • 5. 怎样把代码从unix移植到windows(1330)

评论排行榜

  • 1. 学习网络编程的十个步骤(8)
  • 2. 高速学习socket编程的10个步骤(4)
  • 3. 从“模式转变”说起?(3)
  • 4. 越狱与RUP(一)(3)
  • 5. 超级电子书基地(2)

Powered by: 博客园
模板提供:沪江博客
Copyright ©2025 程序员看世界