tcp客户端编程py

简介: tcp客户端编程py

image.png

image.png

import socket

target_host = "www.google.com"
target_port = 80  # 更正为 HTTP 服务的标准端口

# 创建一个 TCP 套接字
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 连接到目标主机和端口
client.connect((target_host, target_port))

# 发送数据
client.send("GET / HTTP/1.1\r\nHost: www.google.com\r\n\r\n")

# 接收数据
response = client.recv(4096)

print(response)

image.png

image.png

client.send(b"GET / HTTP/1.1\r\nHost:  www.google.com\r\n\r\n")

这行代码使用了之前创建的client套接字对象来发送一个HTTP请求到指定的服务器。下面是对这行代码的详细解释:

client.send():这是套接字对象的一个方法,用于发送数据到已经连接的服务器。

b"GET / HTTP/1.1\r\nHost: www.google.com\r\n\r\n":这是要发送的数据,是一个字节串(bytes literal)。在Python中,以b开头的字符串表示字节串,这在网络编程中很常见,因为网络传输通常是以字节流的形式进行的。

这个字节串实际上是一个HTTP GET请求的格式,具体如下:

GET / HTTP/1.1:这是HTTP请求的第一行,指定了请求的方法(GET)、请求的资源路径(/表示根目录)以及使用的HTTP协议版本(HTTP/1.1)。

\r\n:这是回车换行符,用于分隔HTTP请求的不同部分。

Host: www.google.com:这是HTTP请求头的一部分,指定了请求的目标主机名。在HTTP/1.1中,每个请求都必须包含一个Host头部,以指示请求应该被发送到哪个服务器。

\r\n\r\n:这是两个连续的回车换行符,用于结束HTTP请求头,开始HTTP请求体(在这个例子中没有请求体)。

因此,client.send(b"GET / HTTP/1.1\r\nHost: www.google.com\r\n\r\n")这行代码的意思是向已经连接的服务器发送一个HTTP GET请求,请求访问www.google.com的根页面。

请注意,这段代码假设client套接字对象已经成功连接到了www.google.com的服务器。如果套接字没有连接或者连接到了错误的服务器,这个请求将不会被正确处理。此外,由于这是一个简单的示例,它没有处理实际的HTTP通信中可能遇到的各种情况,比如错误处理、重定向、身份验证等。在实际的网络编程中,需要考虑更多的细节和异常情况。

image.png

这段代码是 Python 中使用 socket 模块的套接字对象来接收从远程主机发送过来的数据的示例。

client 是一个套接字对象,它是在之前的代码中通过 socket.socket() 函数创建的,并且已经使用 .connect() 方法连接到了远程主机。

.recv(4096) 是套接字对象的一个方法,用于接收来自远程主机的数据。4096 是传入的参数,表示最多接收的字节数。这是一个缓冲区大小,意味着一次调用 .recv() 最多可以接收 4096 字节的数据。如果远程主机发送的数据少于这个数量,.recv() 将返回实际接收到的数据量;如果数据量超过这个数量,.recv() 将只返回前 4096 字节的数据。

response 是一个变量,用于存储从 .recv() 方法返回的数据。这个数据通常是二进制格式的,除非你知道远程主机发送的是文本数据,否则你可能需要对其进行适当的解码。

print(response) 打印出接收到的数据。如果数据是文本格式,这将直接输出文本;如果是二进制数据,你可能需要先将其转换为可读格式,例如使用 response.decode('utf-8') 来解码为 UTF-8 编码的文本。

这段代码通常用在客户端程序中,用于接收服务器响应的数据。在服务器端,相应的套接字方法通常是 .send() 或 .sendall(),用于向客户端发送数据。

完整代码

import socket

target_host = "www.google.com"
target_port = 80  # 更正为 HTTP 服务的标准端口

# 创建一个 TCP 套接字
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 连接到目标主机和端口
client.connect((target_host, target_port))

# 发送数据
client.send("GET / HTTP/1.1\r\nHost: www.google.com\r\n\r\n")

# 接收数据
response = client.recv(4096)

print(response)


相关文章
|
Cloud Native Go 项目管理
敏捷项目管理解锁:2023年使用YouTrack的全面指南
敏捷项目管理解锁:2023年使用YouTrack的全面指南
3294 0
|
编解码 算法 安全
【总结整理】【路径规划】- 浅谈路径规划算法
# 0 序 本文将从两个大块浅谈一下路径规划算法,第一部分是规划算法本身,第二部分是地图。 ---- howe # 1 前言   移动一个简单的物体(object)看起来很容易,而路径搜索却比较复杂。那为什么涉及到路径搜索就产生麻烦了呢?考虑以下情况: ![image.png](https://ata2-img.oss-cn-zhangjiakou.aliyuncs.com/
20855 4
【总结整理】【路径规划】- 浅谈路径规划算法
|
SQL 分布式计算 资源调度
MaxCompute常见错误汇总(更新ing)
从今天开始,小编会为大家陆续解读MaxCompute常见问题,帮助大家快速上手MaxCompute,玩转大数据计算平台。
24291 8
|
8月前
|
存储 自然语言处理 安全
如何快速生成二维码,免费生成工具推荐
对于大多数个人和企业用户,首选草料二维码,简单免费,且是创立时间最长、用户量最大、口碑最好的二维码生成器,市面上80%的二维码都由其生成。如果对于有出海需求的电商用户,可以选择二维码彩虹。GoQR.me更适合快速生成简单二维码或批量生成。Unitag则适合希望深入定制的专业用户,但操作难度相对较高
如何快速生成二维码,免费生成工具推荐
|
机器学习/深度学习 人工智能 自然语言处理
构建智能化编程环境:AI 与代码编辑器的融合
在人工智能的推动下,未来的代码编辑器将转变为智能化编程环境,具备智能代码补全、自动化错误检测与修复、个性化学习支持及自动化代码审查等功能。本文探讨了其核心功能、技术实现(包括机器学习、自然语言处理、深度学习及知识图谱)及应用场景,如辅助新手开发者、提升高级开发者效率和优化团队协作。随着AI技术进步,智能化编程环境将成为软件开发的重要趋势,变革开发者工作方式,提升效率,降低编程门槛,并推动行业创新。
|
缓存 人工智能 程序员
活动|2024 CodeFuse 「编码挑战季」活动已开启!欢迎报名参加
1024程序员节,CodeFuse发起「编码挑战季」活动,邀请开发者参与muAgent、MFTCoder、ModelCache、CodeFuse-IDE四个项目的编码挑战。活动设有多难度任务,完成即可获积分兑换礼品,更有神秘大奖等你来拿!详情及报名请访问CodeFuse官方渠道。
160 1
|
SQL XML Java
【MyBatis】 MyBatis框架下的高效数据操作:深入理解增删查改(CRUD)
【MyBatis】 MyBatis框架下的高效数据操作:深入理解增删查改(CRUD)
179 1
|
SQL 数据处理 数据库管理
如何在 SQL Server 中使用 LEFT
【8月更文挑战第9天】
640 2
如何在 SQL Server 中使用 LEFT
|
搜索推荐
一文教会你:如何在搜索过程中过滤CSDN的相关文章,一次设置永久过滤
这篇文章教你如何在浏览器搜索设置中添加自定义搜索引擎,通过在搜索查询中加入"-csdn"参数来过滤掉CSDN的搜索结果,从而提高搜索结果的质量。
一文教会你:如何在搜索过程中过滤CSDN的相关文章,一次设置永久过滤
|
Linux 应用服务中间件 nginx
Linux下权限设置之suid、sgid、sticky
Linux下权限设置之suid、sgid、sticky
下一篇
开通oss服务