Python网络编程Sockets怎样实现,用法是什么
Admin 2022-11-12 群英技术资讯 955 次浏览
这篇文章给大家介绍了“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神经网络学习使用Keras进行回归运算,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
这篇文章主要介绍了Python实战之实现简单的名片管理系统,文中有非常详细的代码示例,对正在学习python的小伙伴们有非常好的帮助,需要的朋友可以参考下
在我们使用微信时,因为加的人过多,可能有的时候会无法再添加好友。微信限制添加5000名好友,想要再添加超额的好友,我们就要选择一些不常联系的好友,把他们移除。移除可以为我们节省很多的空间,便于我们有效的查找信息。上篇小编向大家介绍了python中的移除函数pop函数,其实python中不止pop一种移除函数,还有remove函数,他们在python的使用过程中有什么区别吗?
这篇文章主要介绍了python设置 matplotlib 正确显示中文的四种方式,帮助大家更好的理解和学习使用python,感兴趣的朋友可以了解下
本文讲述如何使用 tkinter 的布局管理 (被称作 layout managers 或 geometry managers). tkinter 有三种布局管理方式:pack,grid,place。注意这三种布局管理在同一个 master window 里一定不可以混用! 布局管理有以下功能:
成为群英会员,开启智能安全云计算之旅
立即注册关注或联系群英网络
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