python入行036(socket模块)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python入行036(socket模块),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3477字,纯文字阅读大概需要5分钟。
内容图文
![python入行036(socket模块)](/upload/InfoBanner/zyjiaocheng/635/bb4944f9df5d4cf08bdfed94abe691f8.jpg)
1 socket是什么
socket是一个位于应用层和传输层之间的“抽象层”,他把复杂的tcp/ip协议族隐藏在socket接口后面。socket抽象层位于传输层上面, 用户无需深入理解tcp/udp协议,只需要遵循socket的规定去编程,写出的程序自然就是遵循tcp/udp标准的。
2 基于TCP的套接字
2.1 简单版
# 服务器端 import socket s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 创建服务器套接字对象 s.bind(('127.0.0.1', 8080)) # 绑定(ip, 端口号)到套接字对象 s.listen(5) # 开始监听,5指的是半连接池的大小 print("服务器启动完成,开始监听") conn, client_addr = s.accept() # 被动接受客户端的连接,(阻塞式)等待连接的到来 print(client_addr) data = conn.recv(1024) # 接收TCP数据,最大接收的数据量为1024Bytes,收到的是bytes类型 print(data.decode('utf-8')) conn.send('hello'.encode('utf-8')) # 发送TCP数据 conn.close() # 关闭服务器套接字对象
# 客户端 import socket c = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 创建客户端套接字对象 c.connect(('127.0.0.1', 8080)) # 主动初始化服务器连接 c.send('hello, world'.encode('utf-8')) # 发送TCP数据 data = c.recv(1024) # 接收TCP数据 print(data.decode('utf-8')) c.close() # 关闭客户端套接字对象
2.2 加上通信循环
# 服务器端 import socket s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 创建服务器套接字对象 s.bind(('127.0.0.1', 8080)) # 绑定(ip, 端口号)到套接字对象 s.listen(5) # 开始监听,5指的是半连接池的大小 print("服务器启动完成,开始监听") conn, client_addr = s.accept() # 被动接受客户端的连接,(阻塞式)等待连接的到来 while True: try: data = conn.recv(1024) # 接收TCP数据,最大接收的数据量为1024Bytes,收到的是bytes类型 if not data: break print('客户端发送的消息', data.decode('utf-8')) conn.send('hello'.encode('utf-8')) # 发送TCP数据 except Exception: break conn.close() # 关闭conn连接
# 客户端 import socket c = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 创建客户端套接字对象 c.connect(('127.0.0.1', 8080)) # 主动初始化服务器连接 while True: msg = input("输入要发送的消息>>>: ").strip() if not msg: continue c.send(msg.encode('utf-8')) # 发送TCP数据 data = c.recv(1024) # 接收TCP数据 print(data.decode('utf-8')) c.close() # 关闭客户端套接字对象
2.3 加上连接循环
# 服务器端 import socket s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 创建服务器套接字对象 s.bind(('127.0.0.1', 8080)) # 绑定(ip, 端口号)到套接字对象 s.listen(5) # 开始监听,5指的是半连接池的大小 print("服务器启动完成,开始监听") # 加上连接循环 while True: conn, client_addr = s.accept() # 被动接受客户端的连接,(阻塞式)等待连接的到来 while True: try: data = conn.recv(1024) # 接收TCP数据,最大接收的数据量为1024Bytes,收到的是bytes类型 if not data: break print('客户端发送的消息', data.decode('utf-8')) conn.send('hello'.encode('utf-8')) # 发送TCP数据 except Exception: break conn.close() # 关闭conn连接
# 客户端 import socket c = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 创建客户端套接字对象 c.connect(('127.0.0.1', 8080)) # 主动初始化服务器连接 while True: msg = input("输入要发送的消息>>>: ").strip() if not msg: continue c.send(msg.encode('utf-8')) # 发送TCP数据 data = c.recv(1024) # 接收TCP数据 print(data.decode('utf-8')) c.close() # 关闭客户端套接字对象
3 基于UDP协议的套接字
# 服务器端 import socket server=socket.socket(socket.AF_INET,socket.SOCK_DGRAM) # 数据报协议=》udp协议 server.bind(('127.0.0.1',8081)) while True: data,client_addr=server.recvfrom(1024) server.sendto(data.upper(),client_addr) server.close()
# 客户端 import socket client=socket.socket(socket.AF_INET,socket.SOCK_DGRAM) # 流式协议=》tcp协议 while True: msg=input('>>>: ').strip() client.sendto(msg.encode('utf-8'),('127.0.0.1',8081)) res=client.recvfrom(1024) print(res) client.close()
内容总结
以上是互联网集市为您收集整理的python入行036(socket模块)全部内容,希望文章能够帮你解决python入行036(socket模块)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。