Python socket 模块
2016-03-09 20:50
726 查看
Python socket 模块
Python 提供了两个基本的 socket 模块。第一个是
使用一种异步的方式来实现这种功能,您可以提供一些插件类来处理服务器中应用程序特有的任务。表 1 列出了本节所涉及的类和模块。
表 1. Python 类和模块
让我们来看一下这些模块,以便理解它们是如何工作的。
这个 API 与标准的 C API 之间的区别在于它是面向对象的。在 C 中,socket 描述符是从 socket 调用中获得的,然后会作为一个参数传递给 BSD API 函数。在 Python 中,
方法的对象返回一个 socket 对象。表 2 给出了几个类方法,表 3 显示了一部分实例方法。
表 2. Socket 模块的类方法
表 3. Socket 模块的实例方法
类方法 和 实例方法 之间的区别在于,实例方法需要有一个 socket 实例(从 socket 返回)才能执行,而类方法则不需要。
1、服务端-echoserver.py
[python] view
plain copy
#!/usr/bin/python
"USAGE: echoserver.py <port>"
from SocketServer import BaseRequestHandler, TCPServer
import sys, socket
class EchoHandler(BaseRequestHandler):
def handle(self):
print "Client connected:", self.client_address
self.request.sendall(self.request.recv(2**16))
self.request.close()
if len(sys.argv) != 2:
print __doc__
else:
TCPServer(('', int(sys.argv[1])), EchoHandler).serve_forever()
2、客户端-echoclient.py
[python] view
plain copy
#!/usr/bin/python
"USAGE: echoclient.py <server> <word> <port>"
from socket import *
import sys
if len(sys.argv) != 4:
print __doc__
sys.exit(0)
sock = socket(AF_INET, SOCK_STREAM)
sock.connect((sys.argv[1], int(sys.argv[3])))
message = sys.argv[2]
messlen, received = sock.send(message), 0
if messlen != len(message):
print "Failed to send complete message"
print "Received: ",
while received < messlen:
data = sock.recv(32)
sys.stdout.write(data)
received += len(data)
print
sock.close()
本文转载自:http://blog.csdn.net/caleng/article/details/5426862
Python 提供了两个基本的 socket 模块。第一个是
Socket,它提供了标准的 BSD Sockets API。第二个是
SocketServer,它提供了服务器中心类,可以简化网络服务器的开发。Python
使用一种异步的方式来实现这种功能,您可以提供一些插件类来处理服务器中应用程序特有的任务。表 1 列出了本节所涉及的类和模块。
类/模块 | 说明 |
---|---|
Socket | 低层网络接口(每个 BSD API) |
SocketServer | 提供简化网络服务器开发的类 |
Socket模块提供了 UNIX® 程序员所熟悉的基本网络服务(也称为 BSD API)。这个模块中提供了在构建 socket 服务器和客户机时所需要的所有功能。
这个 API 与标准的 C API 之间的区别在于它是面向对象的。在 C 中,socket 描述符是从 socket 调用中获得的,然后会作为一个参数传递给 BSD API 函数。在 Python 中,
socket方法会向应用 socket
方法的对象返回一个 socket 对象。表 2 给出了几个类方法,表 3 显示了一部分实例方法。
类方法 | 说明 |
---|---|
Socket | 低层网络接口(每个 BSD API) |
socket.socket(family, type) | 创建并返回一个新的 socket 对象 |
socket.getfqdn(name) | 将使用点号分隔的 IP 地址字符串转换成一个完整的域名 |
socket.gethostbyname(hostname) | 将主机名解析为一个使用点号分隔的 IP 地址字符串 |
socket.fromfd(fd, family, type) | 从现有的文件描述符创建一个 socket 对象 |
实例方法 | 说明 |
---|---|
sock.bind( (adrs, port) ) | 将 socket 绑定到一个地址和端口上 |
sock.accept() | 返回一个客户机 socket(带有客户机端的地址信息) |
sock.listen(backlog) | 将 socket 设置成监听模式,能够监听 backlog 外来的连接请求 |
sock.connect( (adrs, port) ) | 将 socket 连接到定义的主机和端口上 |
sock.recv( buflen[, flags] ) | 从 socket 中接收数据,最多 buflen个字符 |
sock.recvfrom( buflen[, flags] ) | 从 socket 中接收数据,最多 buflen个字符,同时返回数据来源的远程主机和端口号 |
sock.send( data[, flags] ) | 通过 socket 发送数据 |
sock.sendto( data[, flags], addr ) | 通过 socket 发送数据 |
sock.close() | 关闭 socket |
sock.getsockopt( lvl, optname ) | 获得指定 socket 选项的值 |
sock.setsockopt( lvl, optname, val ) | 设置指定 socket 选项的值 |
1、服务端-echoserver.py
[python] view
plain copy
#!/usr/bin/python
"USAGE: echoserver.py <port>"
from SocketServer import BaseRequestHandler, TCPServer
import sys, socket
class EchoHandler(BaseRequestHandler):
def handle(self):
print "Client connected:", self.client_address
self.request.sendall(self.request.recv(2**16))
self.request.close()
if len(sys.argv) != 2:
print __doc__
else:
TCPServer(('', int(sys.argv[1])), EchoHandler).serve_forever()
2、客户端-echoclient.py
[python] view
plain copy
#!/usr/bin/python
"USAGE: echoclient.py <server> <word> <port>"
from socket import *
import sys
if len(sys.argv) != 4:
print __doc__
sys.exit(0)
sock = socket(AF_INET, SOCK_STREAM)
sock.connect((sys.argv[1], int(sys.argv[3])))
message = sys.argv[2]
messlen, received = sock.send(message), 0
if messlen != len(message):
print "Failed to send complete message"
print "Received: ",
while received < messlen:
data = sock.recv(32)
sys.stdout.write(data)
received += len(data)
sock.close()
本文转载自:http://blog.csdn.net/caleng/article/details/5426862
相关文章推荐
- 002第一部分_[字典/列表解析/字符串操作/STR与BYTES的区别]
- Python socket编程
- NumPy的详细教程
- python学习笔记:python对象
- Python介绍
- python学习:机器学习下的pybrain和多线程编程
- Learning Python(14)--struct模块
- Python中的re模块(一)
- python 正则表达式
- Python Socket Scanner 笔记-企
- 像web一样使用python
- Python爬虫学习笔记(3)-XPath与多线程爬虫
- Python爬虫学习笔记(2)-单线程爬虫
- python图像处理2
- python程序打包!!!!
- python中if __name__ == '__main__'
- 『Python』 多线程 端口扫描器
- [python]非常小的下载图片脚本(非通用)
- Python多线程学习
- Titanic Kaggle 竞赛系列