欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 手游 > Python套接字

Python套接字

2025/4/20 4:26:31 来源:https://blog.csdn.net/happy_king_zi/article/details/142380027  浏览:    关键词:Python套接字
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 是整数。

4、通过域名获取IP地址
import socket
ip = socket.gethostbyname("geek-docs.com")
print(ip)

5、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 socketwith 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 socketwith 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:breakprint(data.decode())回显客户端服务器示例import socket
import timewith socket.socket() as s:host = 'localhost'port = 8001s.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:breakcon.sendall(data)异步服务器
import asyncioasync 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()

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词