• 您能找到的最小网络协议实现程序


    现实世界中您能找到的最小网络协议实现的程序

     1 #!/usr/bin/env python
     2 # Simple Gopher Client -  Chapter 1 - gopherclient.py
     3 #《PYTHON网络编程基础》 第35页
     4 
     5 
     6 import socket, sys
     7 
     8 port = 70
     9 host = sys.argv[1]
    10 filename = sys.argv[2]
    11 
    12 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    13 s.connect((host, port))
    14 
    15 s.sendall(filename + "
    ")
    16 
    17 while 1:
    18     buf = s.recv(2048)
    19     if not len(buf):
    20         break
    21     sys.stdout.write(buf)

    命令行下敲人:

    $ chmod a+x gopherclient.py

    $ python gopherclient.py quux.org /

    运行结果:打印Gopher服务器根目录的文件列表

    iWelcome to gopher at quux.org!    fake    (NULL)    0
    i    fake    (NULL)    0
    iThis server has a lot of information of historic interest,    fake    (NULL)    0
    ifunny, or just plain entertaining -- all presented in Gopher.    fake    (NULL)    0
    iThere are many mirrors here of rare or valuable files with the    fake    (NULL)    0
    iaim to preserve them in case their host disappears.  PLEASE READ    fake    (NULL)    0
    i"About This Server" FOR IMPORTANT NOTES AND LEGAL INFORMATION.    fake    (NULL)    0
    i    fake    (NULL)    0
    0About This Server    /About This Server.txt    gopher.quux.org    70    +
    1Archives    /Archives    gopher.quux.org    70    +
    1Books    /Books    gopher.quux.org    70    +
    1Communication    /Communication    gopher.quux.org    70    +
    iThis directory contains the entire text of the book    fake    (NULL)    0
    i"We the Media: Grassroots Journalism by the People, for the People"    fake    (NULL)    0
    iby Dan Gillmor in various formats.    fake    (NULL)    0
    i    fake    (NULL)    0
    iFeel free to download and enjoy.    fake    (NULL)    0
    1Computers    /Computers    gopher.quux.org    70    +
    1Current Issues and Events (Updated Apr. 23, 2002)    /Current    gopher.quux.org    70    +
    1Development Projects    /devel    gopher.quux.org    70    +
    0Gopher's 10th Anniversary    /3.0.0.txt    gopher.quux.org    70
    1Government, Politics, Law, and Conflict    /Government    gopher.quux.org    70    +
    0How To Help    /How To Help.txt    gopher.quux.org    70    +
    1Humor and Fun    /Humor and Fun    gopher.quux.org    70    +
    1Index to Quux.Org    /Archives/index    gopher.quux.org    70
    1Internet    /Internet    gopher.quux.org    70    +
    1Other Gopher Servers    /Software/Gopher/servers    gopher.quux.org    70
    1People    /People    gopher.quux.org    70    +
    1Reference    /Reference    gopher.quux.org    70    +
    1Software and Downloads    /Software    gopher.quux.org    70    +
    1The Gopher Project    /Software/Gopher    gopher.quux.org    70
    0What's New    /whatsnew.txt    gopher.quux.org    70    +

    想对应的服务器程序 server.py     用eclipse+PyDev写好后直接点击运行

     1 #!/usr/bin/env python
     2 # Simple Server -Chapter 1 - server.py
     3 
     4 import socket
     5 
     6 host = ''
     7 port = 51423
     8 
     9 s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    10 s.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
    11 s.bind((host,port))
    12 s.listen(1)
    13 
    14 print "Server is running on port %d; press Ctrl-C to terminate." % port
    15 
    16 while 1:
    17     clientsock,clientaddr = s.accept()
    18     clientfile = clientsock.makefile('rw',0)
    19     clientfile.write("Welcome, " + str(clientaddr) + "
    ")
    20     clientfile.write("Please enter a string: ")
    21     line = clientfile.readline().strip()
    22     clientfile.write("You entered %d characters. 
    " % len(line))
    23     clientfile.close()
    24     clientsock.close()

    运行结果:在eclipse的console中显示

      Server is running on port 51423; press Ctrl-C to terminate.

    打开mac上的终端窗口,用telnet连接刚运行的服务器程序 server.py

    $ telnet localhost 51423

    Trying ::1...

    telnet: connect to address ::1: Connection refused

    Trying 127.0.0.1...

    Connected to localhost.

    Escape character is '^]'.

    Welcome, ('127.0.0.1', 49299)

    Please enter a string: Hello

    You entered 5 characters. 

    Connection closed by foreign host.

    $

    成功了,短短20行即可写出一个server程序,python展示了其编写网络client-server程序的威力,于简单中见大力量

    参考书:

    《Python网络编程基础》

    作者: John Goerzen 
    出版社: 电子工业出版社
    副标题: 使用Python构建网络程序的综合指南
    译者: 莫迟 等 
    出版年: 2007
    定价: 68.00
    ISBN: 9787121256660

    这本书是学习python网络程序编写的入门书,相关入门书的中文版仍然很少,这大概算是较为通俗易懂的一本

    目录

    第1章  客户/服务器网络介绍... 3

    理解TCP基础... 3

    寻址... 4

    可靠性... 4

    路由... 5

    安全... 6

    使用客户/服务器模式... 6

    服务器端端口号... 7

    客户端端口号... 7

    理解UDP. 7

    理解物理传输和以太网... 9

    Python网络编程... 9

    底层接口... 10

    基本客户端操作... 10

    错误和异常... 11

    文件类对象... 12

    基本服务器操作... 13

    高级接口... 15

    总结... 17

    第2章  网络客户端... 19

    理解Sockets. 19

    建立Sockets. 20

    寻找端口号... 21

    从Socekt获取信息... 22

    利用Sockets通信... 23

    处理错误... 23

    Socket异常... 24

    遗漏的错误... 26

    文件类对象引起的错误... 29

    使用UDP. 31

    总结... 34

    第3章  网络服务器... 35

    准备连接... 35

    建立Socket对象... 36

    设置和得到Socket选项... 36

    绑定Socket 39

    侦听连接... 39

    接受连接... 40

    处理错误... 41

    使用UDP. 43

    使用inetd或xinetd. 45

    配置inetd. 47

    配置xinetd. 48

    运行例子... 50

    通过inetd使用Socket对象... 51

    通过inetd使用UDP. 51

    和inetd相关的错误处理... 54

    什么时候不应该使用inetd. 55

    通过syslog来记录日志... 55

    在Python中使用syslog. 56

    避免死锁... 60

    总结... 63

    第4章  域名系统... 65

    进行DNS查询... 65

    使用操作系统查询服务... 66

    执行基本查询... 66

    执行反向查询... 70

    反向查找基础... 71

    对于反向查找数据真实性的检查... 72

    获得环境信息... 74

    使用PyDNS进行高级查询... 76

    DNS Records. 76

    安装PyDNS. 77

    简单PyDNS查询... 77

    查询特殊的名称服务器... 79

    分解查询结果... 82

    总结... 85

    第5章  高级网络操作... 87

    半开放Sockets. 87

    超时... 89

    传输字符串... 90

    唯一字符串结束标识符... 91

    转义符(Escaping)... 91

    数据编码... 92

    可调整的字符串结束标识符... 92

    首部的大小指示器... 92

    理解网络字节顺序... 93

    使用广播数据... 95

    使用IPv6. 97

    解析地址... 98

    处理Family参数... 100

    绑定到特殊的地址... 102

    使用poll() 或 select()实现事件通知... 104

    使用select() 107

    总结... 109

    第6章  Web客户端访问... 113

    获取Web页面... 114

    认证... 115

    提交表单数据... 118

    用GET方法提交... 118

    用POST方法提交... 120

    处理错误... 121

    捕获连接错误... 121

    捕获数据错误... 123

    使用非HTTP协议... 125

    总结... 125

    第7章  解析HTML和XHTML. 127

    理解基本的HTML解析... 128

    处理真实的HTML.. 130

    翻译实体... 130

    转换字符参考... 132

    处理不均衡的标签... 133

    一个实际可以工作的例子... 137

    总结... 143

    第8章  XML和XML-RPC.. 145

    理解XML文档... 147

    使用DOM... 148

    使用DOM完全解析... 151

    使用DOM产生文档... 154

    DOM类型参考... 157

    使用XML-RPC.. 159

    XML-RPC自省... 160

    一个具有完整功能的例子... 162

    XML-RPC错误处理... 165

    XML-RPC类型处理... 165

    总结... 166

    第9章  E-Mail的编写和编码... 169

    E-Mail Composition and Decoding. 169

    理解传统信息... 169

    处理Header 170

    Headers不会说明您的邮件... 171

    含有的Bcc的Headers. 171

    邮件列表中的Headers. 172

    垃圾中的Headers. 172

    规则的例外情况... 172

    显示Headers中的信息... 173

    撰写传统的邮件... 173

    添加Date和Message-ID Headers. 174

    解析传统邮件... 176

    基本邮件解析... 177

    解析日期... 178

    理解MIME.. 180

    MIME概念... 180

    MIME是如何工作的... 181

    添加MIME附件... 182

    编写MIME替换方法... 185

    构建非英语的Header 187

    组成嵌套的多部分... 188

    解析MIME邮件... 190

    解码部分... 192

    解码Headers. 193

    总结... 195

    第10章  简单邮件传输协议(SMTP)... 197

    Simple Message Transport Protocol 197

    SMTP库简介... 197

    错误处理和会话调试... 199

    从EHLO中得到信息... 202

    使用安全Sockets层(Secure Sockets Layer,SSL)和安全传输层(Transport Layer Security,TLS)    205

    认证... 208

    SMTP技巧... 209

    总结... 210

    第11章  POP. 211

    连接和认证... 212

    取得邮箱信息... 215

    下载邮件... 216

    删除邮件... 218

    总结... 221

    第12章  IMAP. 223

    理解Python中的IMAP. 224

    Twisted中的IMAP简介... 225

    理解Twisted基础... 226

    登录... 228

    错误处理... 231

    扫描文件夹列表... 236

    检查文件夹... 239

    Message Numbers 和. UIDs. 239

    邮件范围... 240

    总结信息... 240

    基本下载... 243

    使用一个命令下载整个一个邮箱... 243

    下载单独邮件... 245

    标记和删除邮件... 249

    读取标志... 250

    设置标志... 252

    删除邮件... 252

    取得邮件的部分内容... 255

    找出邮件结构... 256

    得到指定的部分... 260

    查找邮件... 262

    构造查询... 263

    执行查询... 265

    添加邮件... 268

    建立和删除文件夹... 270

    在文件夹之间移动邮件... 270

    总结... 271

    第13章  FTP. 275

    理解FTP. 275

    通信信道... 276

    认证和匿名FTP. 276

    用Python实现FTP功能... 277

    以ASCII模式下载文件... 278

    以二进制模式下载文件... 279

    以高级二进制模式下载文件... 279

    上传数据... 281

    以高级二进制模式上传... 282

    处理错误... 283

    扫描目录... 284

    解析UNIX目录列表... 286

    不用解析列表而得到信息... 288

    递归下载... 290

    操纵服务器上的文件和目录... 293

    删除文件和目录... 293

    建立目录... 294

    移动和重命名文件... 294

    总结... 294

    第14章  数据库客户端... 295

    SQL和网络... 295

    Python中的SQL.. 296

    连接... 297

    PostgreSQL.. 298

    MySQL.. 299

    Jython zxJDBC.. 299

    执行命令... 301

    事务... 302

    事件执行的性能... 303

    在结束前隐藏改变... 303

    重复指令... 305

    参数风格... 305

    使用executemany() 307

    处理那些不适合executemany()的情况... 308

    得到数据... 310

    使用fetchall() 310

    使用fetchmany() 311

    使用fetchone() 312

    阅读Metadata. 313

    计算行数... 314

    以Dictionaries形式得到数据... 315

    使用数据类型... 317

    得到指定类型的数据... 319

    总结... 319

    第15章  SSL. 321

    理解网络弱点... 322

    嗅探攻击(Sniffing)... 322

    插入攻击... 323

    删除攻击... 323

    重复攻击... 323

    截获Session. 323

    伪装服务器(信息转向)... 324

    妥协的服务器... 324

    人体工程学... 324

    使用SSL降低攻击... 324

    认证远程机器... 325

    理解Python中的SSL.. 326

    使用内置的SSL.. 326

    使用OpenSSL.. 330

    使用OpenSSL验证服务器证书... 331

    取得根认证授权证书... 332

    验证证书... 332

    总结... 338

    第16章  SocketServer 341

    使用BaseHTTPServer 341

    处理对于特殊文档的请求... 343

    同时处理多个请求... 346

    SimpleHTTPServer 348

    CGIHTTPServer 349

    实现新协议... 350

    取得关于客户端的信息... 352

    IPv6. 352

    总结... 353

    第17章  SimpleXMLRPCServer 355

    SimpleXMLRPCServer基础... 356

    测试您的服务器... 358

    提供函数... 359

    使用类的特性... 361

    使用DocXMLRPCServer 364

    使用CGIXMLRPCRequestHandler 365

    支持Multicall函数...... 367

    总结... 367

    第18章  CGI 369

    设置CGI. 370

    理解CGI. 370

    理解使用Python编写CGI. 371

    取得环境信息... 373

    取得输入... 375

    额外的URL成分... 375

    GET方法... 378

    POST方法... 380

    转义特殊字符... 383

    处理一个字段的多个输入... 385

    上传文件... 386

    使用Cookies. 388

    Cookies的结构... 389

    使用Cookies. 390

    总结... 392

    第19章  mod_python. 393

    理解为什么需要mod_python. 393

    安装和配置mod_python. 394

    载入模块... 395

    配置Apache目录... 396

    修复配置问题... 398

    理解mod_python基础... 399

    PythonHandler的角色... 400

    处理程序返回值... 401

    分派请求... 402

    处理输入... 405

    附加的URL部分... 405

    GET方法... 407

    POST方法... 410

    转义(Escaping)... 412

    理解解释器实例... 413

    在mod_python中预建立处理程序... 415

    总结... 415

    第20章  Forking. 419

    理解进程... 419

    理解fork()... 421

    重复的文件描述符... 422

    Zombie进程... 423

    性能... 424

    Forking的第一步... 424

    Zombie程序... 425

    使用信号解决Zombie问题... 426

    使用轮询(Polling)来解决Zombie问题... 428

    Forking服务器... 430

    锁定... 433

    错误处理... 438

    总结... 441

    第21章  线程... 443

    在Python中使用线程... 444

    使用共享变量... 446

    安全线程... 447

    设法访问共享的且缺乏的资源... 450

    避免死锁... 453

    编写含有线程的服务器... 455

    练习:使用线程的聊天服务器... 457

    使用线程池... 457

    编写含有线程的客户端... 463

    总结... 467

    第22章  网络客户端... 469

    决定是否使用异步I/O.. 470

    使用异步通信... 471

    高级的服务器端使用... 476

    监控多个master socket 480

    在服务器上使用Twisted. 485

    总结... 489

    索引....... 

  • 相关阅读:
    vue父子组件通信
    canvas(一)
    js中的this
    git中遇到的问题
    javaScript中各种数据结构的遍历
    git合并多个提交
    vue学习笔记(三)——vuex—store配置
    vue学习笔记(二)——路由配置
    0欧电阻的作用
    STM32L系列单片机内部EEPROM的读写
  • 原文地址:https://www.cnblogs.com/Thermo/p/4225193.html
Copyright © 2020-2023  润新知