Python下TCP编程

news2024/11/25 0:37:41

在Python中使用socket模块的socket函数可以完成,语法格式如下:

s=socket.socket(AddressFamily, Type)

函数socket.socket创建一个socket,返回该socket的描述符。该函数带有两个参数。

  • Address Family:可以选择AF_INET(用于Internet进程间通信),或者AF_UNIX(用于同一台机器进程间通信),实际工作中常用AF_INET。

  • Type:套接字类型,可以是SOCK_STREAM(流式套接字,主要用于TCP协议)或者SOCK_DGRAM(数据报套接字,主要用于UDP协议)。

socket对象的内置方法

方法描述
s.bind()绑定地址(host,port)到套接字,在AF_INET下以元组(host,port)的形式表示地址。
s.listen()开始TCP监听。backlog指定在拒绝连接之前,操作系统可以挂起的最大连接数量。该值至少为1,大部分应用程序设为5即可
s.accept()被动接受TCP客户端连接,(阻塞式)等待连接的到来。
s.connect()主动初始化TCP服务器连接,一般address的格式为元组(hostname,port),如果连接出错,返回socket,error错误
s.recv()接收TCP数据,以字符串形式返回。bufsize指定要接收的最大数据量;flag提供有关消息的其他信息,通常可以忽略
s.send()发送TCP数据,将string中的数据发送到连接的套接字。返回值是要发送的字节数量,该数量可能小于string的字节大小
s.sendall()完整发送TCP数据,将string中的数据发送到连接的套接字,但在返回之前会尝试发送所有数据。成功则返回Node,失败则抛出异常
s.recvfrom()接收UDP数据。与recv()类似,但返回值是(data,address)元组。其中data是包含接收数据的字符串,address是发送数据的套接字地址
s.sendto()发送UDP数据,将数据发送到套接字。address是形式为(ipaddr,port)的元组,指定远程地址。返回值是发送的字节数
s.close()关闭套接字

创建TCP服务器

完成一个TCP服务器的功能,需要流程如下:

  • 使用socket创建一个套接字。
  • 使用bind绑定IP和端口。
  • 使用listen使套接字变为可以被动连接。
  • 使用accept等待客户端的连接。
  • 使用recv/send接收发送数据。

创建一个server.py文件,代码如下:

import socket                                               #导入socket模块
host='127.0.0.1'                                            #主机IP
port=8080                                                   #端口号
web=socket.socket()                                         #创建socket对象
web.bind((host,port))                                       #绑定端口
web.listen(5)                                               #设置最多连接数
print('服务器等待客户端连接...')
#开户死循环
while True:
    conn,addr=web.accept()                                  #建立客户端连接
    data=conn.recv(1024)                                    #获取客户端请求数据
    print(data)                                             #打印接收到的数据
    conn.sendall(b'HTTP/1.1 200 OK\r\n\r\nHello World')     #向客户端发送数据
    conn.close()                                            #关闭连接

创建一个client.py文件,代码如下:

import socket
s=socket.socket()
host='127.0.0.1'
port=8080
s.connect((host,port))
send_data=input("请输入要发送的数据:")
s.send(send_data.encode())
#接收对方发送过来的数据,最大接收1024个字节
recvData=s.recv(1024).decode()
print('接收到的数据为:',recvData)
#关闭套接字
s.close()

制作简易聊天窗口:

创建server.py文件,作为服务器程序,代码如下:

import socket
host=socket.gethostname()
port=12345
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.bind((host,port))
s.listen(1)
sock,addr=s.accept()
print('连接已经建立')
info=sock.recv(1024).decode()
while info!='byebye':
    if info:
        print('接收到的内容:'+info)
    send_data=input('输入发送内容:')
    sock.send(send_data.encode())
    if send_data=='byebye':
        break
    info=sock.recv(1024).decode()
sock.close()
s.close()

创建client.py文件,作为客户端程度,代码如下:

import socket
s=socket.socket()
host=socket.gethostname()
port=12345
s.connect((host,port))
print('已连接')
info=''
while info!='byebye':
    send_data=input('输入发送内容:')
    s.send(send_data.encode())
    if send_data=='byebye':
        break
    info=s.recv(1024).decode()
    print('接收到的内容:'+info)
s.close()

UDP

不同于TCP协议,UDP协议是面向无连接的协议。

使用UDP协议时,不需要建立链接,只需要知道对方的IP地址和端口号,就可以直接发数据包。但是,数据无法保证一定到达。

虽然用UDP传输数据不可靠,但它的优点是比TCP协议速度快。

对于不要求可靠到达的数据,就可以使用UDP协议。

UDP是面向消息的协议,通信时不需要建立连接,数据的传输自然是不可靠的。

UPD一般用于多点通信和实时的数据业务。

  • 语音广播
  • 视频
  • 聊天软件
  • TFTP(简单文件传送)
  • SNMP(简单网络管理协议)
  • RIP(路由信息协议,如报告股票市场、航空信息)
  • DNS(域名解释)

​创建UDP服务器

创建udp_server.py文件,代码如下:

import socket

s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
s.bind(('127.0.0.1',8888))
print('绑定UDP到8888端口')
data,addr=s.recvfrom(1024)
data=float(data)*1.8+32
send_data='转换后的温度(单位:华氏温度):'+str(data)
print('Received from %s:%s.'%addr)
s.sendto(send_data.encode(),addr)
s.close()

创建UDP客户端

创建一个UDP客户端的流程步骤如下:

  • 创建客户端套接字
  • 发送/接收数据。
  • 关闭套接字
    创建udp_client.py文件,代码如下:
import socket

s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
data=input('请输入要转换的温度(单位:摄氏温度):')
s.sendto(data.encode(),('127.0.0.1',8888))
print(s.recv(1024).decode())
s.close()

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

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

相关文章

软件测试方法之等价类测试

01 等价类划分法 1、应用场合 有数据输入的地方,可以使用等价类划分法。 从大量数据中挑选少量代表数据进行测试。 2、测试思想 穷举测试:把所有可能的数据全部测试一遍叫穷举测试。穷举测试是最全面的测试,但是在实际工作中不能采用&am…

Netty核心知识总结

Netty是一个高性能、异步事件驱动的NIO框架,它提供了对TCP、UDP和文件传输的支持,作为一个异步NIO框架,Netty的所有IO操作都是异步非阻塞的,通过Future-Listener机制,用户可以方便的主动获取或者通过通知机制获得IO操作…

群体遗传 — 核苷酸多样性π

群体遗传 — 核苷酸多样性π **核苷酸多样性(nucleotide diversity),记为π,是分子遗传学中一个重要的概念,用于量化种群内部或不同种群间的遗传多样性。**这一概念由根井正利和李文雄在 1979 年提出。核苷酸多样性的…

zabbix的自动发现机制、代理功能、SNMP监控

一、自动发现(不安全,有时会失效,建议手动添加主机) 1、定义 zabbix主动与服务端联系,将自己的地址和端口发送给服务端,实现自动添加监控主机 客户端是主动的一方 2、缺点 若自定义网段中主机数量太多…

Python 全栈体系【四阶】(二)

第二章 pandas 一、pandas 介绍 Python Data Analysis Library pandas 是基于 NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型结构化数据集所需的工具。 二、pandas 核心数…

C语言进阶之路-数组与指针

目录 一、学习目标 二、数组入门 基本概念 语法释义: 定义: 访问: 赋值: 字符数组 多维数组 数组万能拆解法 三、指针入门 内存地址 基地址 取址符 指针基础 指针的定义: 指针的赋值 指针的尺寸 四、…

快手数仓面试题附答案

题目 1 讲一下你门公司的大数据项目架构?2 你在工作中都负责哪一部分3 spark提交一个程序的整体执行流程4 spark常用算子列几个,6到8个吧5 transformation跟action算子的区别6 map和flatmap算子的区别7 自定义udf,udtf,udaf讲一下…

java:slf4j、log4j、log4j2、logback日志框架的区别与示例

文章目录 背景SLF4J - 简单日志门面:Log4j - 强大而古老的日志框架:Log4j2 - Log4j的升级版:Logback - Log4j的继任者:比较Springboot集成slf4j、log4j2参考 背景 在Java开发中,日志记录是一个不可或缺的组成部分。为了满足不同的需求,Java社区涌现出多…

the name of a constructor must match the name of the enclosing class

构造器名匹配封闭类名 命令码的位置关系不对 解决:调整 命令码所在层级

探索人工智能领域——每日20个名词详解【day9】

目录 前言 正文 总结 🌈嗨!我是Filotimo__🌈。很高兴与大家相识,希望我的博客能对你有所帮助。 💡本文由Filotimo__✍️原创,首发于CSDN📚。 📣如需转载,请事先与我联系以…

基于高德API实现网络geoJSON功能(整体)

代码实现&#xff1a; <script>// 3、初始化一个高德图层const gaode new ol.layer.Tile({title: "高德地图",source: new ol.source.XYZ({url: http://wprd0{1-4}.is.autonavi.com/appmaptile?langzh_cn&size1&style7&x{x}&y{y}&z{z},w…

Axure网页端高复用组件库, 下拉菜单文件上传穿梭框日期城市选择器

作品说明 组件数量&#xff1a;共 11 套 兼容软件&#xff1a;Axure RP 9/10&#xff0c;不支持低版本 应用领域&#xff1a;web端原型设计、桌面端原型设计 作品特色 本作品为「web端组件库」&#xff0c;高保真高交互 (带仿真功能效果)&#xff1b;运用了动态面板、中继…

Hadoop学习笔记(HDP)-Part.09 安装OpenLDAP

目录 Part.01 关于HDP Part.02 核心组件原理 Part.03 资源规划 Part.04 基础环境配置 Part.05 Yum源配置 Part.06 安装OracleJDK Part.07 安装MySQL Part.08 部署Ambari集群 Part.09 安装OpenLDAP Part.10 创建集群 Part.11 安装Kerberos Part.12 安装HDFS Part.13 安装Ranger …

CUDA简介——Grid和Block内Thread索引

1. 引言 前序博客&#xff1a; CUDA简介——基本概念CUDA简介——编程模式CUDA简介——For循环并行化 Thread Index&#xff1a; 每个Thread都有其thread index。 在Kernel中&#xff0c;可通过内置的threadIdx变量来获取其thread index。threadIdx为三维的&#xff0c;有相…

nodejs+vue+微信小程序+python+PHP在线购票系统的设计与实现-计算机毕业设计推荐

伴随着信息时代的到来&#xff0c;以及不断发展起来的微电子技术&#xff0c;这些都为在线购票带来了很好的发展条件。同时&#xff0c;在线购票的范围不断增大&#xff0c;这就需要有一种既能使用又能使用的、便于使用的、便于使用的系统来对其进行管理。在目前这种大环境下&a…

电子学会C/C++编程等级考试2023年03月(四级)真题解析

C/C++等级考试(1~8级)全部真题・点这里 第1题:最佳路径 如下所示的由正整数数字构成的三角形: 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 从三角形的顶部到底部有很多条不同的路径。对于每条路径,把路径上面的数加起来可以得到一个和,和最大的路径称为最佳路径。你的任务就是求出最…

ATECLOUD电源自动测试系统打破传统 助力新能源汽车电源测试

随着新能源汽车市场的逐步扩大&#xff0c;技术不断完善提升&#xff0c;新能源汽车测试变得越来越复杂&#xff0c;测试要求也越来越严格。作为新能源汽车的关键部件之一&#xff0c;电源为各个器件和整个电路提供稳定的电源&#xff0c;满足需求&#xff0c;确保新能源汽车的…

JSON 语法详解:轻松掌握数据结构(上)

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

《微信小程序开发从入门到实战》学习四十一

4.3 云开发文件存储 文件存储功能支持将任意数量和格式的文件&#xff08;如图片和视频&#xff09;保存在云端&#xff0c;支持 以文件夹的形式将文件归类。 在云开发控制台中&#xff0c;可以对云端保存的文件进行管理。 也可以通过文件存储API对文件进行上传、删除、移动…

Android Chips(标签)

目录 一、流式布局标签发展历程 二、类型及使用 2.1 Chip.Action(默认值) 2.2 Chip.Entry 2.3 Chip.Filter 2.4 Chip.Choice 三、常用事件 3.1 OnClickListener 3.2 OnCheckedChangeListener 3.3 OnCloseIconClickListener 四、ChipGroup 4.1 ChipGroup Chip.Choi…