个性化阅读
专注于IT技术分析

python socket网络编程原理和操作 – Python高级开发教程

上一章Python教程请查看:python访问MySQL数据库及其操作

Python提供对网络服务的两种级别的访问,在较低的级别上,你可以访问底层操作系统中的基本套接字支持,它允许你为面向连接和无连接的协议实现客户机和服务器。

Python还有一些库,可以提供对特定应用程序级网络协议(如FTP、HTTP等)的高级访问。

本章让你了解网络编程中最著名的概念——Socket编程。

1、套接字是什么?

套接字是双向通信信道的端点,套接字可以在进程内、同一机器上的进程之间或不同主机上的进程之间通信。

套接字可以在许多不同的通道类型上实现:Unix域套接字、TCP、UDP等等,套接字库提供了处理公共传输的特定类,以及处理其余传输的通用接口。

socket有自己的词汇

编号 术语和说明
1 Domain 用作传输机制的协议族,这些值是常量,如AF_INET、PF_INET、PF_UNIX、PF_X25等等。
2 type 两个端点之间的通信类型,通常是面向连接的协议的SOCK_STREAM和无连接协议的SOCK_DGRAM。
3 protocol 通常为零,此值可用于标识域和类型中的协议变体。
4 hostname 网络接口的标识符 一个字符串,可以是一个主机名,一个四点式地址,或者一个冒号(可能还有点)的IPV6地址一个字符串“<broadcast>”,它指定INADDR_BROADCAST地址。0长度的字符串,指定INADDR_ANY或整数,按主机字节顺序解释为二进制地址。
5 port 每个服务器都侦听客户机对一个或多个端口的调用。端口可以是Fixnum端口号、包含端口号的字符串或服务名称。

2、套接字模块

要创建套接字,必须使用套接字模块中提供的socket.socket()函数,该函数具有一般的语法

s = socket.socket (socket_family, socket_type, protocol=0)

这里是参数的说明:

  • 如前所述,它可以是AF_UNIX,也可以是AF_INET。
  • socket_type,即SOCK_STREAM或SOCK_DGRAM。
  • 协议protocol——这通常被忽略,默认为0。

有了socket对象之后,就可以使用所需的函数来创建客户机或服务器程序,以下是所需功能的列表。

3、服务器套接字的方法

编号 方法和说明
1 s.bind() 此方法将地址(主机名、端口号对)绑定到套接字。
2 s.listen() 该方法设置并启动TCP监听器。
3 s.accept() 这被动地接受TCP客户端连接,等待连接到来(阻塞)。

4、客户端套接字的方法

编号 方法和说明
1 s.connect() 此方法主动启动TCP服务器连接。

5、一般的套接字的方法

编号 方法和说明
1 s.recv() 此方法接收TCP消息
2 s.send() 这个方法传输TCP消息
3 s.recvfrom() 此方法接收UDP消息
4 s.sendto() 此方法传输UDP消息
5 s.close() 此方法关闭套接字
6 socket.gethostname() 返回的主机名。

6、一个简单的服务器

要编写Internet服务器,我们使用socket模块中的socket函数来创建socket对象,然后使用套接字对象调用其他函数来设置套接字服务器。

现在调用bind(主机名、端口)函数来为给定主机上的服务指定端口。

接下来调用返回对象的accept方法。此方法将一直等待,直到客户端连接到你指定的端口,然后返回表示到该客户端的连接的连接对象。

#!/usr/bin/python           

import socket               # 导入socket模块

s = socket.socket()         # 创建socket对象
host = socket.gethostname() # 获取本地主机
port = 12345                # 设置端口号
s.bind((host, port))        # 绑定端口

s.listen(5)                 # 等待客户端连接
while True:
   c, addr = s.accept()     # 建立连接
   print '连接来自于: ', addr
   c.send('信息...')
   c.close()                # 关闭连接

7、一个简单的客户端

让我们编写一个非常简单的客户端程序,它打开到给定端口12345和给定主机的连接,使用Python的套接字模块函数创建套接字客户机非常简单。

socket.connect(hosname, port)在端口上打开到主机名的TCP连接,打开套接字后,就可以像读取任何IO对象一样读取它,完成后记得关闭它,就像关闭文件一样。

下面的代码是一个非常简单的客户机,它连接到给定的主机和端口,从套接字中读取所有可用数据,然后退出:

#!/usr/bin/python           

import socket               # 导入socket模块

s = socket.socket()         # 创建socket对象
host = socket.gethostname() # 获取本地主机
port = 12345                # 设置端口号

s.connect((host, port))
print s.recv(1024)
s.close()                     # 关闭连接

8、Python网络模块

Python网络/Internet编程中一些重要模块的列表。

协议 一般功能 端口号 Python模块
HTTP Web pages 80 httplib, urllib, xmlrpclib
NNTP Usenet news 119 nntplib
FTP File transfers 20 ftplib, urllib
SMTP Sending email 25 smtplib
POP3 Fetching email 110 poplib
IMAP4 Fetching email 143 imaplib
Telnet Command lines 23 telnetlib
Gopher Document transfers 70 gopherlib, urllib

请检查上面提到的所有库,以使用FTP、SMTP、POP和IMAP协议。

赞(0)
未经允许不得转载:srcmini » python socket网络编程原理和操作 – Python高级开发教程

评论 抢沙发

评论前必须登录!