Python网络编程Sockets怎样实现,用法是什么
Admin 2022-11-12 群英技术资讯 986 次浏览
这篇文章给大家介绍了“Python网络编程Sockets怎样实现,用法是什么”的相关知识,讲解详细,步骤过程清晰,有一定的借鉴学习价值,因此分享给大家做个参考,感兴趣的朋友接下来一起跟随小编看看吧。Python提供了两个级别的访问网络服务。 在低级别,可以访问底层操作系统中的基本套接字支持,这允许您实现面向连接和无连接协议的客户端和服务器。
Python还具有提供对特定应用级网络协议(如FTP,HTTP等)的更高级别访问的库。
套接字(Sockets)是双向通信信道的端点。 套接字可以在一个进程内,在同一机器上的进程之间,或者在不同主机的进程之间进行通信,主机可以是任何一台有连接互联网的机器。
套接字可以通过多种不同的通道类型实现:Unix域套接字,TCP,UDP等。 套接字库提供了处理公共传输的特定类,以及一个用于处理其余部分的通用接口。
套接字有自己的术语 :
domain : 用作传输机制的协议族。这些值是常量,例如:AF_INET,PF_INET,PF_UNIX,PF_X25等。
type : 两个端点之间的通信类型,通常用于面向连接的协议的SOCK_STREAM和用于无连接协议的SOCK_DGRAM。
protocol : 通常为0.这可以用于标识域和类型中的协议的变体。
hostname : 网络接口的标识符 :
一个字符串,可以是一个主机名,一个有四个点符号的IP地址,或一个冒号中的IPV6地址(可能是点)符号。
一个字符串“”,它指定一个INADDR_BROADCAST地址。
零长度字符串,指定INADDR_ANY,或
整数,以主机字节顺序解释为二进制地址。
port : 每个服务器监听一个或多个端口的客户端的调用。端口可能是Fixnum端口号,包含端口号的字符串或服务名称。
要创建套接字,必须使用套接字模块中的socket.socket()函数,该函数具有一般语法 :
s = socket.socket (socket_family, socket_type, protocol = 0)
这里是上述参数的描述 :
socket_family : 它的值可以是:AF_UNIX或AF_INET,如前所述。
socket_type : 它的值可以是:SOCK_STREAM或SOCK_DGRAM。
protocol : 这通常被省略,默认为0.
当创建了套接字对象这后,就可以使用所需的函数来创建客户端或服务器程序。 以下是所需函数的列表:
服务器套接字方法
| 编号 | 方法 | 描述 |
|---|---|---|
| 1 | s.bind() |
此方法将地址(主机名,端口号对)绑定到套接字。 |
| 2 | s.listen() |
此方法设置并启动TCP侦听器。 |
| 3 | s.accept() |
这被动地接受TCP客户端连接,等待直到连接到达(阻塞)。 |
| 编号 | 方法 | 描述 |
|---|---|---|
| 1 | s.connect() |
此方法主动启动TCP服务器连接。 |
通用套接字方法
| 编号 | 方法 | 描述 |
|---|---|---|
| 1 | s.recv() |
此方法接收TCP消息。 |
| 2 | s.send() |
该方法发送TCP消息 |
| 3 | s.recvfrom() |
此方法接收UDP消息 |
| 4 | s.sendto() |
此方法发送UDP消息 |
| 5 | s.close() |
此方法关闭套接字 |
| 6 | socket.gethostname() |
返回主机名 |
要编写互联网服务器,可使用socket模块中可用的socket()来创建套接字对象。 然后使用套接字对象调用其他函数来设置套接字服务器。
现在调用bind(hostname,port)函数来指定主机上服务的端口。
接下来,调用返回对象的accept()方法。 此方法在您指定的端口等待客户端连接,连接成功后返回一个连接(connection)对象,该对象表示与该客户端的连接。
#!/usr/bin/python3 # This is server.py file
import socket
# create a socket object
serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# get local machine name
host = socket.gethostname()
port = 8088
# bind to the port
serversocket.bind((host, port))
print("Server start at port: 8088")
# queue up to 5 requests
serversocket.listen(5)
while True:
# establish a connection
clientsocket,addr = serversocket.accept()
print("Got a connection from %s" % str(addr))
msg='Thank you for connecting'+ "\r\n"
clientsocket.send(msg.encode('ascii'))
clientsocket.close()
下面接着编写一个非常简单的客户端程序,打开与给定端口8088与上面的服务器程序主机的连接。 使用Python的socket模块功能创建套接字客户端非常简单。
socket.connect(hosname,port)函数打开hostname上的port的TCP连接。当打开了一个套接字,就可以像任何IO对象一样读取它。 完成后,请记住关闭它,就像关闭文件一样。
示例
以下代码是连接到给定主机和端口的非常简单的客户端,从套接字读取任何可用数据,然后退出 :
#!/usr/bin/python3 # This is client.py file
import socket
# create a socket object
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# get local machine name
host = socket.gethostname()
port = 8088
# connection to hostname on the port.
s.connect((host, port))
# Receive no more than 1024 bytes
msg = s.recv(1024)
s.close()
print (msg.decode('ascii'))
现在在后台运行先运行:server.py,然后运行上面的client.py来查看结果,如果程序没有错误,那么应该得到类似以下以结果 :
Python网络/互联网编程中的一些重要模块的列表如下:
| 协议 | 通用功能 | 端口号 | 对应Python模块 |
|---|---|---|---|
| HTTP | 网页服务 | 80 | httplib, urllib, xmlrpclib |
| NNTP | Usenet新闻 | 119 | nntplib |
| FTP | 文件传输 | 20 | ftplib, urllib |
| SMTP | 发送邮件 | 25 | smtplib |
| POP3 | 获取电子邮件 | 110 | poplib |
| IMAP4 | 获取电子邮件 | 143 | imaplib |
| Telnet | 命令行 | 23 | telnetlib |
| Gopher | 文档传输 | 70 | gopherlib, urllib |
请检查上述所有库,以使用FTP,SMTP,POP和IMAP协议。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
这篇文章主要介绍了Python合并Excel表(多sheet)的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
这篇文章主要为大家介绍了python区块链实现简版网络的详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
这篇文章主要介绍了自然语言处理之文本热词提取,主要就是通过jieba的posseg模块将一段文字分段并赋予不同字段不同意思,然后通过频率计算出热频词,需要的朋友可以参考下
这篇文章主要介绍了Python连接MySQL数据库后的一些基本操作,并以银行管理系统项目为例,为大家具体介绍了一下部分功能的实现,文中的示例代码具有一定的学习价值,感兴趣的可以了解一下
我们在使用python做接口测试的时候,会需要python的单元测试框架,在python中单元测试框架很多unittest、pytest、nose等,这篇文章就给介绍一下python的单元测试框中pytest和unittest区别是什么,接下来我们一起看看吧。
成为群英会员,开启智能安全云计算之旅
立即注册关注或联系群英网络
7x24小时售前:400-678-4567
7x24小时售后:0668-2555666
24小时QQ客服
群英微信公众号
CNNIC域名投诉举报处理平台
服务电话:010-58813000
服务邮箱:service@cnnic.cn
投诉与建议:0668-2555555
Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 ICP核准(ICP备案)粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008