现实世界中您能找到的最小网络协议实现的程序
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
索引.......