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.mzph.cn/news/111640.shtml

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

相关文章

Flink学习---15、FlinkCDC(CDC介绍、案例实操)

星光下的赶路人star的个人主页 未来总是藏在迷雾中让人胆怯,但当你踏入其中,便会云开雾散 文章目录 1、CDC简介1.1 什么是CDC1.2 CDC的种类1.3 Flink-CDC 2、FlinkCDC案例实操2.1 开启MySQL Binlog并重启MySQL2.2 FlinkSQL方式的应用2.2.1 导入依赖2.2.2…

Elasticsearch2.x Doc values

文档地址: https://www.elastic.co/guide/en/elasticsearch/reference/2.4/doc-values.html https://www.elastic.co/guide/en/elasticsearch/guide/2.x/docvalues-intro.html https://www.elastic.co/guide/en/elasticsearch/guide/2.x/docvalues.html https://ww…

【Java 进阶篇】HTML DOM 事件详解

当用户在网页上点击按钮、输入文本、鼠标移动到某个区域或执行其他互动操作时,这些动作都可以触发事件。HTML DOM(文档对象模型)允许我们使用JavaScript来捕获、处理和响应这些事件,以实现网页的交互和动态性。本篇博客将围绕HTML…

iOS原生、Android 原生, flutter 三种方式给照片流添加文字(水印)

效果图:三中代码实现的效果差不多 Swift:代码 import UIKitclass ImageWatermarking: NSObject {static func textToImage(drawText text: String, inImage initImage: UIImage, atPoint point: CGPoint) -> UIImage {let textColor = UIColor.whitelet textFont = UIFon…

ccpc2023秦皇岛F. Mystery of Prime(dp)

题目要求改变数组中的数字使相邻数字之和是质数,同时改变数字的次数最少 因为改变的数字可以无穷大 我假设当一个数改变为一个某一个偶数时,他周围的任意的奇数肯定能和他相加变成质数 当一个数变为某一个大于1的奇数时,他周围任意偶数肯定…

港联证券:资金融通构成强支撑 “一带一路”金融合作开新局

本年是共建“一带一路”主张提出十周年。经过十年打开,共建“一带一路”从夯基垒台、立柱架梁到落地生根、持久打开,已成为打开包容、互利互惠、协作共赢的国际协作途径。“资金融通”作为首份“一带一路”白皮书提出的“五通”之一,定位为“…

DPDK收发包流程分析

一、 前言 DPDK是intel工程师开发的一款用来快速处理数据包的框架,最初的目的是为了证明传统网络数据包处理性能低不是intel处理器导致的,而是传统数据的处理流程导致,后来随着dpdk的开源及其生态的快速发展,dpdk成为了高性能网络数据处理的优秀框架。本篇文章主要介绍DPDK…

Django实现音乐网站 ⒇

使用Python Django框架做一个音乐网站, 本篇音乐播放器-添加播放音乐功能实现。 目录 创建播放器数据表 设置表结构 执行创建表 命令 执行 数据表结构 添加单个歌曲 创建路由 加入播放器视图 模板处理 基类方法 子页面调用 优化弹窗 加入layui文件 基…

在URP管线中添加ShaderMaterial自定义GUI的方法

编写GUI面板 1. 新建GUI子面板 using UnityEngine; using UnityEngine.Rendering;namespace UnityEditor.Rendering.Universal.ShaderGUI {internal class CP_XXXOutLineGUI{public static class Styles{}public struct LitProperties{public LitProperties(MaterialProperty…

vxe-table添加排序

在 <vxe-column> 中添加sortable属性 <vxe-columnfield"longitude"sortabletitle"经度"></vxe-column><vxe-columnfield"latitude"sortabletitle"纬度"></vxe-column><vxe-columnfield"dateEst…

Cross decomposition交叉分解大比拼:性能、应用场景和可视化对比总结

交叉分解(Cross Decomposition)在机器学习中是一种用于分析两组变量之间关系的技术。它能够找出两组数据之间的线性关系,并将这些关系用于预测或分类。在本文中将探讨四种不同的交叉分解方法:CCA(典型相关分析)、PLSCanonical、PLSRegression和PLSSVD,并从五个方面进行详…

Spring Boot如何优雅实现动态灵活可配置的高性能数据脱敏功能

1.背景 在当下互联网高速发展的时代下&#xff0c;涉及到用户的隐私数据安全越发重要&#xff0c;一旦泄露将造成不可估量的后果。所以现在的业务系统开发中都会对用户隐私数据加密之后存储落库&#xff0c;同时还要求后端返回数据给前台之前进行数据脱敏。所谓脱敏处理其实就…

正则表达式的神奇世界:表达、匹配和提取

正则表达式的神奇世界&#xff1a;表达、匹配和提取 前言第一&#xff1a; 什么是正则表达式&#xff1f;第二&#xff1a; 字符匹配和量词&#xff1a;1. 字符匹配&#xff1a;2. 量词&#xff1a;3. 贪婪和非贪婪匹配&#xff1a; 第三&#xff1a;字符类和元字符1. 字符类&a…

TikTok Shop美国本土店VS跨境店,如何选择?有何区别?

TikTok不仅仅是一个用于分享有趣短视频的平台&#xff0c;它也逐渐成为了商家们极力推广自己品牌和产品的场所。 在TikTok的商业生态系统中&#xff0c;存在几种不同的商店类型&#xff0c;各有其独特性和适用场景。今天&#xff0c;我们就来深入探讨这些店的差异与特点。 一、…

判断两线段是否相交

我们做两次 每次把一条线段视为直线&#xff0c;判断另一条线段的两个点是否在直线的两侧 如果两次都符合&#xff0c;说明直线相交 struct Point {double x, y; Point operator - (const Point &A) const {Point B; B.xx-A.x; B.yy-A.y; return B; }double operator ^ …

Si24R2|2.4G单发射芯片 +7dBm可调功率 校讯通

Si24R2是一种通用、低功耗、高性能的2.4GHz无线射频发射芯片&#xff0c;主要用于单向通信系统&#xff0c;以降低系统成B&#xff0c;在运行中与si24r1兼容。 Si24r2具有低功耗和低成B。 它主要用于单向低功率传输系统&#xff0c;如无线控制系统、无线数据采集系统等。 Si2…

Android之自定义相册文件选择器

一、自定义FilePicker类 package com.custom.jfrb.util; //自己的包名位置import android.app.Activity; import androidx.fragment.app.Fragment;import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.…

在mysql8查询中使用ORDER BY结合LIMIT时,分页查询时出现后一页的数据重复前一页的部分数据。

这里写目录标题 问题描述&#xff1a;问题模拟&#xff1a;原因分析问题解释问题解决验证官方文档支持 问题描述&#xff1a; 在mysql8查询中使用ORDER BY结合LIMIT时&#xff0c;分页查询时出现后一页的数据重复前一页的部分数据。 问题模拟&#xff1a; 表table_lock_test&…

pytorch里面的 nn.Parameter 和 tensor有哪些异同点

简单来说&#xff0c;你可以把tensor看作是一个通用的数据结构&#xff0c;而nn.Parameter看作是一种特殊的tensor&#xff0c;这种tensor可以被优化以提高模型的性能。在创建模型参数时&#xff0c;你应该使用nn.Parameter而不是直接使用tensor&#xff0c;因为这样可以确保模…

Milvus 介绍

Milvus 介绍 Milvus 矢量数据库是什么&#xff1f;关键概念非结构化数据嵌入向量向量相似度搜索 为什么是 Milvus?支持哪些索引和指标&#xff1f;索引类型相似度指标(Similarity metrics) 应用示例Milvus 是如何设计的&#xff1f;开发者工具API访问Milvus 生态系统工具 本页…