python实现TCPclient

python实现TCPclient是一件简单的事情,只要通过socket这个模块就可以实现。

一、实现步骤

1、导入模块:

首先,你需要导入Python的socket模块。

import socket

2、创建Socket对象:

使用socket.socket()函数创建一个新的socket对象。

client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

这里,AF_INET表示使用IPv4地址族,SOCK_STREAM表示使用TCP协议。

3、连接到服务器:

使用connect()方法连接到服务器。传入服务器的IP地址和端口号。

server_address = ('server_ip', port_number)
client_socket.connect(server_address)

4、发送数据:

使用send()方法发送数据到服务器。

message = 'Hello, server!'
client_socket.send(message.encode())

这里需要使用encode()将字符串转换为字节流,因为socket发送的是字节流。

5、接收数据:

使用recv()方法接收从服务器发送过来的数据。

data = client_socket.recv(1024)
print('Received from server:', data.decode())

同样,需要使用decode()将接收到的字节流转换为字符串。

6、关闭连接:

使用close()方法关闭客户端socket连接。

client_socket.close()

二、关于实现过程中的问题

1、socket.socket的参数有哪些,如何设置这些参数?

socket.socket() 函数用于创建一个新的 socket 对象。它接受4个参数,但通常只要设置前2个参数:

(1)family(地址族,Address Family)

即Address Family (地址族,AF): 指定网络地址的类型。常用的有:

socket.AF_INET:IPv4 地址族,用于 Internet。
socket.AF_INET6:IPv6 地址族,用于 Internet。
socket.AF_UNIX 或 socket.AF_FILE:用于 Unix 域(本地连接)。


(2)type(套接字类型,Socket Type):

即Socket Type (套接字类型,Type): 指定 socket 的类型。常用的有:

socket.SOCK_STREAM:用于 TCP 协议,提供面向连接的稳定数据传输,即 TCP 套接字。
socket.SOCK_DGRAM:用于 UDP 协议,提供不稳定但是快速的数据传输,即 UDP 套接字。

(3)proto(协议类型,Protocol):

这个参数通常用于指定特定的协议。在大多数情况下,它不需要指定,会使用默认值-1。

(4)fileno(文件描述符,File Descriptor):

这个参数允许你将一个现有的文件描述符包装成一个套接字对象。如果提供了这个参数,familytypeproto参数的值将会被忽略。

2、recv必须是1024么?

不一定,在 socket.recv(buffer_size) 中,buffer_size 参数指定了一次性接收数据的最大字节数。理论上你可以将 buffer_size 设置得非常大,但是实际上会有一些限制:

(1)操作系统的限制:

操作系统通常会有单次数据传输的最大字节数限制,这个限制取决于操作系统的配置。

(2)网络的限制:

网络设备和协议也可能限制单次传输的最大数据量。即使你的操作系统允许大数据传输,但是网络设备(如路由器、交换机)或者协议(如TCP)可能会限制每次传输的数据量。

(3)内存限制:

如果你一次性接收太多数据,可能会导致内存溢出,特别是在内存受限的系统上。

因此,一般来说,你可以根据你的应用需求和系统限制来选择一个合适的 buffer_size。如果你不确定最合适的值是多少,可以使用一个相对较小的值,然后在实际应用中根据性能和可靠性进行调优。

3、recv会阻塞流程么?

是的,socket.recv(buffer_size) 是一个阻塞的操作,如果没有数据可接收,它会一直等待直到有数据到来。这种阻塞行为在默认情况下是的,如果你希望设置非阻塞模式,可以使用 setblocking(0) 方法。

在非阻塞模式下,如果没有数据可接收,socket.recv(buffer_size) 会立即返回一个空字节串(b''),而不是等待数据到来。

相关设置如下所示:

sock = socket.socket()
sock.setblocking(False)

三、实战

def tcp_client(server_ip, server_port, message):try:# 创建一个TCP套接字client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 连接服务器client_socket.connect((server_ip, server_port))# 发送数据到服务器client_socket.send(message.encode('utf-8'))# 接收从服务器返回的数据response = client_socket.recv(1024)print(response)# 关闭套接字连接client_socket.close()# 返回从服务器接收的响应return response.decode('utf-8')except Exception as e:return str(e)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/164386.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

35 机器学习(三):混淆矩阵|朴素贝叶斯|决策树|随机森林

文章目录 分类模型的评估混淆矩阵精确率和召回率 接口介绍其他的补充 朴素贝叶斯基础原理介绍拉普拉斯平滑下面给出应用的例子朴素贝叶斯的思辨 决策树基础使用基本原理信息熵信息增益信息增益率Gini指数 剪枝api介绍 随机森林------集成学习初识基本使用api介绍 分类模型的评估…

【EI会议征稿】第三届应用力学与先进材料国际学术会议(ICAMAM 2024)

第三届应用力学与先进材料国际学术会议(ICAMAM 2024) 2024 3rd International Conference on Applied Mechanics and Advanced Materials(ICAMAM 2024) 第三届应用力学与先进材料国际学术会议(ICAMAM 2024&#xff09…

如何写代码实现VRP问题中车辆容量限制及时间窗要求(python)

问题研究背景 使用遗传模拟退火算法求解如下10个卸货点的VRPTW问题。为了使研究的问题更加有意义,本人将时间限理解为服务点一天的具体可以允许配送的时间。 如果不要求车辆从配送中心出发的时间是统一的并且为0时刻,那么就默认第一个配送节点是一定能赶…

将用友U8的数据可视化需要哪些工具?

将金蝶U8的数据可视化需要一个奥威BI数据可视化工具,以及一套专为用友U8打造的标准化BI数据分析方案。 奥威BI SaaS平台:一键链接用友U8,立得报表 别的BI软件围绕用友U8的数据做可视化:1、准备配置环境;2、下载安装配…

JMeter做http接口功能测试

1. 普通的以key-value传参的get请求 e.g. 获取用户信息 添加http请求;填写服务器域名或IP;方法选GET;填写路径;添加参数;运行并查看结果。 2. 以Json串传参的post请求 e.g. 获取用户余额 添加http请求;…

UITesting 界面测试

1. 创建界面测试视图 UITestingBootcampView.swift import SwiftUI/// 界面测试 ViewModel class UITestingBootcampViewModel: ObservableObject{let placeholderText: String "Add name here..."Published var textFiledText: String ""Published var…

『吴秋霖赠书活动 | 第三期』《Python asyncio并发编程》

文章目录 1. 写在前面2. 浅谈asyncio3. Python asyncio并发编程 不再受限于!asyncio异步让你的程序在高并发时翱翔自如! 声明:赠书活动是博主与出版社达成合作,只属于粉丝的专属福利 本期书籍:《Python asyncio并发编程…

数字货币和区块链:跨境电商的未来之革命

随着全球数字化浪潮的不断涌现,跨境电商正经历着前所未有的革命。其中,数字货币和区块链技术被认为是这场革命的关键驱动力。 它们不仅改变了支付方式,还提供了更安全、高效的交易体验,同时也为跨境电商开启了新的商业模式和机会…

38 WEB漏洞-反序列化之PHPJAVA全解(下)

目录 Java中的API实现序列化和反序列化演示案例WebGoat_Javaweb靶场反序列化测试2020-网鼎杯-朱雀组-Web-think java真题复现 文章参考: https://www.cnblogs.com/zhengna/p/15737517.html https://blog.csdn.net/MCTSOG/article/details/123819548 ysoserial生成攻…

可以更改字体颜色的便签备忘录工具选择用哪个

日常添加笔记记录是一个非常好的习惯,通过笔记来记录一些重要的内容一方面可以帮助大家回顾过去的相关记录,另一方面如果记录的笔记是有关学习类的,还有助于大家随时查看记录的笔记。 多数时候记录笔记内容大家通常会选择一些比较方便易操作…

SQL数据库管理工具RazorSQL mac中文版特点与功能

RazorSQL mac是一款功能强大的SQL数据库管理工具,它支持多种数据库,包括MySQL、Oracle、Microsoft SQL Server、SQLite、PostgreSQL等。 RazorSQL mac 软件特点和功能 多种数据库支持:RazorSQL支持多种数据库,用户可以通过一个工…

Windows 事件日志监控

Windows 事件日志是记录 Microsoft 系统上发生的所有活动的文件,在 Windows 环境中,将记录系统上托管的系统、安全性和应用程序的事件,事件日志提供包含有关事件的详细信息,包括日期、时间、事件 ID、源、事件类型和发起它的用户。…

UE4 材质实操记录

TexCoord的R通道是从左到右的递增量,G通道是从上到下的递增量,R通道减去0.5,那么左边就是【-0.5~0】区间,所以左边为全黑,Abs取绝对值,就达到一个两边向中间的一个递减的效果,G通道同理&#xf…

01. 汇编LED驱动实验

01. 汇编LED驱动实验 汇编原理分析为什么要学习Cortex—A汇编STM32IO初始化流程IMX6UL初始化流程 汇编基础处理器内部数据传输指令存储器访问指令 编写驱动编译程序烧写bin文件 汇编原理分析 为什么要学习Cortex—A汇编 需要用汇编初始化一些SOC外设使用汇编初始化DDR&#x…

QT_day2

使用手动连接,将登录框中的取消按钮使用qt4版本的连接到自定义的槽函数中,在自定义的槽函数中调用关闭函数 将登录按钮使用qt5版本的连接到自定义的槽函数中,在槽函数中判断ui界面上输入的账号是否为"admin",密码是否为…

python 对图片增加边框,logo贴图,获取图片exif参数,填写图片文本内容

完整代码 # 找到个可以下载免费字体的网站https://font.chi删除我naz.com/mi删除我anfei.html from PIL import Image, ImageDraw, ImageFont import exifreaddef photo_exif(image_path):f open(image_path, rb)tags exifread.process_file(f)# 打印所有照片信息&#xff0…

Mac电脑版交互式原型设计软件 Axure RP 8汉化 for mac

Axure RP 8是一款专业快速原型设计软件,它主要用于定义需求、设计功能和界面等,适用于商业分析师、信息架构师、产品经理、IT咨询师、用户体验设计师、交互设计师和UI设计师等用户。 该软件可以快速、高效地创建原型,并支持多人协作设计和版…

【vue3】组件间通讯

1.上级传给下级 父级组件&#xff1a; <ReqTab ref"crontabRef" hide"openCronfalse" fill"crontabFill" :expression"expression" :method"method" ></ReqTab> 函数中赋值&#xff1a; 子组件&#xff1a; …

Android问题笔记 - NoSuchmethodException: could not find Fragment constructor

点击跳转>Unity3D特效百例点击跳转>案例项目实战源码点击跳转>游戏脚本-辅助自动化点击跳转>Android控件全解手册点击跳转>Scratch编程案例点击跳转>软考全系列 &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff0c;以及各种资源分享&…

AFL安全漏洞挖掘

安全之安全(security)博客目录导读 ATF(TF-A)/OPTEE之FUZZ安全漏洞挖掘汇总 目录 一、AFL简介 二、AFL的安装 三、代码示例及种子语料库 四、AFL插桩编译 五、AFL运行及测试 六、AFL结果分析 一、AFL简介 模糊测试&#xff08;Fuzzing&#xff09;技术作为漏洞挖掘最有…