socket是一个底层的TCP/IP的库,可以用它来写一些网络应用程序。
python把socket库包装了一下:http://docs.python.org/library/socket.html
上面的文档给了一个很好的介绍。
下面通过例子来大略说说socket编程的一些内容
第零个例子:访问google
import socket sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM) sock.connect(('www.google.com.hk',80)) sock.sendall( '''GET / HTTP/1.1 Host: www.google.com.hk ''') s='' sock.settimeout(2) while True: try: buf=sock.recv(4096) s+=buf except: break print s
使用socket访问远程主机的步骤是:
先用socket.socket构造socket对象
之后connet到地址、端口
最后sendall、recv、close来发送、接受和关闭。
settimeout的作用是设置链接超时时间。
第一个例子:hello服务器
import socket sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM) sock.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1) sock.bind(('localhost',8001)) sock.listen(2) while True: try: conn,addr=sock.accept() conn.settimeout(5) buf=conn.recv(4096) print buf conn.sendall( '''HTTP/1.1 200 OK Content-Type: text/html <html> <head></head> <body>hello?</body> </html>''') conn.close() except socket.timeout: print 'time out' sock.close()
运行之后,你可以在浏览器里面输入http://localhost:8001来看到一声hello
用socket做为服务器需要的步骤:
使用socket.socket来构造一个socket对象。
bind到地址、端口
listen开始监听(参数指明等待队列的最大值)
不停的accept接受链接
使用recv、send、close来完成数据交换。
为了方便调试,使用setsockopt来设置REUSEADDR,防止一些奇妙的错误。
更多的内容可以参加docs.python.org的文档,同时也可以看诸如《Computer Systems A programmer's Perspective》之类的书。
只要遵守特定的协议,你可以完成很多事情,例如:
使用pop3查看邮箱
使用smtp发邮件
使用ftp传文件
在wikipedia上面有这些协议很好的知识入口。