python实现套接字创建
作者:林海峰4573 时间:2021-09-09 05:12:04
1、网络协议
TCP / IP 是设备用于在 Internet 和大多数本地网络上进行通信的一组协议。 TCP 更可靠,具有大量错误检查并需要更多资源。 HTTP,SMTP 或 FTP 等服务使用它。 UDP 的可靠性要差得多,错误检查的能力也有限,所需资源也更少。 VoIP 等服务使用它。
socket.SOCK_STREAM用于为 TCP 创建套接字,而socket.SOCK_DGRAM为 UDP 创建套接字。
2、地址族
创建套接字时,必须指定其地址族,在套接字中使用该类型。
AF_UNIX,AF_LOCAL-本地通讯
AF_INET-IPv4 Internet 协议
AF_INET6-IPv6 Internet 协议
AF_IPX-IPX-Novell 协议
AF_BLUETOOTH-无线蓝牙协议
AF_PACKET-底层数据包接口
对于AF_INET地址族,指定了一对(主机,端口)。 host是一个字符串,表示互联网域表示法中的主机名(如example.com)或 IPv4 地址(如93.184.216.34),并且 port 是整数。
3、通过域名获取IP地址
import socket
ip = socket.gethostbyname("geek-docs.com")
print(ip)
4、socket
TCP ipv4
import socket
# 创建用于IPV4的TCP套接字
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
# 工作时间服务器的主机名和端口
host = "time.nist.gov"
port = 13
# 连接到远程套接字
s.connect((host, port))
# 将数据发送到套接字。套接字必须连接到远程套接字。从字节发送数据,直到发送完所有数据或发生错误为止
s.sendall(b'')
print(str(s.recv(4096), 'utf-8'))
# HEAD请求:HEAD 请求是没有消息正文的 GET 请求。 请求/响应的标头包含元数据,例如 HTTP 协议版本或内容类型。
import socket
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.connect(("webcode.me", 80))
s.sendall(b"HEAD / HTTP/1.1\r\nHost: webcode.me\r\nAccept: text/html\r\n\r\n")
print(str(s.recv(1024), 'utf-8'))
#GET 请求:请求指定资源的表示形式。 使用 GET 的请求应仅检索数据
import socket
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.connect(("webcode.me", 80))
# 对于 HTTP 1.1 协议,默认情况下,连接可以是持久的。 这就是为什么我们发送Connection: close标头的原因。
s.sendall(b"GET / HTTP/1.1\r\nHost: webcode.me\r\nAccept: text/html\r\nConnection: close\r\n\r\n")
while True:
data = s.recv(1024)
if not data:
break
print(data.decode())
#回显客户端服务器示例
import socket
import time
with socket.socket() as s:
host = 'localhost'
port = 8001
s.bind((host, port))
print(f'socket binded to {port}')
s.listen()
con, addr = s.accept()
with con:
while True:
data = con.recv(1024)
if not data:
break
con.sendall(data)
#异步服务器
import asyncio
async def handle_client(reader, writer):
data = (await reader.read(1024))
writer.write(data)
writer.close()
loop = asyncio.get_event_loop()
loop.create_task(asyncio.start_server(handle_client, 'localhost', 8001))
loop.run_forever()
来源:https://blog.51cto.com/u_7961702/5329004
标签:python,套接字
0
投稿
猜你喜欢
关于Youtube URL的十个技巧
2009-04-21 13:19:00
利用Python查看目录中的文件示例详解
2023-02-06 14:13:28
详解基于pycharm的requests库使用教程
2023-08-12 09:40:39
asp 去掉html中的table正则代码函数
2011-04-06 10:48:00
Python使用selenium实现网页用户名 密码 验证码自动登录功能
2023-11-14 18:58:45
利用Python+PyQt5实现简易浏览器的实战记录
2022-10-30 23:16:26
在select语句中使用top的一些小技巧
2009-03-12 12:21:00
用python写个颜值评分器筛选最美主播
2022-11-25 22:13:08
理清mysql外链的含义和命令
2010-03-09 15:55:00
ASP写的汉字转换为UTF-8的一段代码
2009-07-05 18:49:00
使用Python机器学习降低静态日志噪声
2021-11-09 23:48:57
php网络安全中命令执行漏洞的产生及本质探究
2023-05-30 05:34:31
对Python的Django框架中的项目进行单元测试的方法
2021-02-23 03:17:04
python实现串口自动触发工作的示例
2023-11-06 22:19:09
css3弹性盒模型
2010-05-10 20:47:00
Python3.10.4激活venv环境失败解决方法
2022-11-15 10:39:39
Python装饰器的应用场景及实例用法
2022-06-24 16:09:03
pycharm设置python文件模板信息过程图解
2023-03-21 14:46:22
python自动截取需要区域,进行图像识别的方法
2021-05-14 11:04:42
PL/SQL数据类型及操作符
2009-02-26 11:17:00