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上面有这些协议很好的知识入口。