基于tcp协议的套接字通信

1、套接字socket简介

Socket是应用层与TCP/UDP协议通信的中间软件抽象层,它充当一种接口的角色!封装了传输层以下的东西。

1.1基于tcp的socket通信流程图

image

2.tcp服务端搭建

需求:模拟两个手机的通话

from ipaddress import IPv4Address
import socket

# 1.买手机
# socket.AF_INET 指定使用的IPv4地址
# socket.SOCK_STREAM 指定是tcp协议,流式协议,这里发过来的数据像水流粘在一起,所以会带来粘包问题
# socket.SOCK_DGRAM 指定的是udp协议,每一份数据都有分隔,所以不会带来粘包问题
phone = socket.socket(socket.AF_INET,socket.SOCK_STREAM)

# 2.绑定手机卡
 # 内部是参数是一个元组,第一参数为服务端自己对应的ip地址,第二个参数为需要绑定的端口
phone.bind(('127.0.0.1',8080))

# 3.开机--开启监听(把套接字由主动设置为被动模式)
phone.listen(5) # 5指的是半连接池的大小,最大允许128个连接

# 4.等待电话连接请求
while True:  # 加上链接循环
conn ,client_addr = phone.accept() 
# 返回的是一个元组,分别为,可以通过元组解包的形式得到具体的值
# conn 新的套接字,指的是服务当前的客户端套接字
# client_addr 客户端端口和ip地址


# 5.收/发信息
while True:
	data = conn.recv(1024)  # 最大接收的数据量为1024Bytes,收到的也是Bytes类型
	conn.send(data.upper())

# 6.关闭电话连接conn
conn.close()

3.tcp客户端搭建

import socket

# 1.买电话(与服务端建立连接)
phone = socket.socket(socket.AF_INET,socket.SOCK_STREAM)

# 2.拨通服务端电话
# conneect里面是一个元组,第一个参数是服务端绑定的ip,第二参数是服务端绑定的端口
phone.connect(('127.0.0.1',8080))

# 3.发送信息
while True:
	msg = input()
	if msg == 'quit':
		break
	phone.send(“msg”.encode('utf-8'))
	phone.send('hello world'.encode('utf-8'))

# 4.接收消息
# recv_data 是接收到的数据的二进制,需要decode('utf-8')解码获取到数据
recv_data =phone.recv(1024)

# 5.关闭连接
phone.close()

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:基于tcp协议的套接字通信 - Python技术站

(0)
上一篇 2023年4月2日
下一篇 2023年4月2日

相关文章

  • 基本数据类型之列表

    1.列表的定义 1.采用变量名=[]的方式定义2.采用变量名=list()的方式定义 2.列表的作用 列表是用来存多个数据,并且这些数据是需要按位置存放的,后面我们可以通过索引取出列表里的数据。 3.类型转换 但凡可以被for循环遍历的类型(可迭代对象)都可以当做参数传给list()转成列表 4.列表的内置方法 # 1.按照索引取改值(正向取改+反向取改) …

    Python开发 2023年4月2日
    00
  • 一切皆对象和深浅拷贝

    1.元类 元类的来源是:python中一切皆对象。 1.1 什么是元类 元类就是用来实例化产生类的类 关系:元类—实例化—类(自定义的类)—实例化—-对象(obj) 1.2如何查看内置的元类 1.type是内置的元类2.我们用class关键字定义出来的所有类以及内置的类都是由内置的元类type实例化产生的 例如:在python中int、dic…

    2023年4月2日
    00
  • python基础(待补充)

    第一篇:计算机的基础知识 编程语言的介绍    计算机介绍和五大组成 平台与软件跨平台介绍 CS、BS架构和网络通信协议 操作系统的介绍 cpu详解 存储器详解 操作系统启动流程和BIOS介绍 关于编辑器和解释型编译型语言 第二篇:python环境的搭建 python介绍和解释器的安装(暂略) python程序的运行方式和步骤 集成开发环境和虚拟环境介绍 第…

    Python开发 2023年4月2日
    00
  • python中的三大主流wed框架简介

    1.django 特点:大而全,自带的功能特别特别多,类似于航空母舰 不足之处:有时候过于笨重 django中web框架的三个部分: socket部分:用的wsgiref模块路由与视图函数的对应关系:自己写的模板语法:自己写的 2.flask 特点:小而精,自带的功能特别少,类似于轻骑兵 但是它的第三方模块特别特别的多,如果把第三方模块加起来完全可以盖过dj…

    Python开发 2023年4月2日
    00
  • 数据库配置限)不用root用户操作数据库了(为数据库创建用户,并赋予权限)

    步骤 1.为路飞项目创建数据库 在mysql终端输入以下代码: create database luffy charset=utf8; 2.创建数据库用户 create user ‘username’@’host’ identified by ‘password’; 其中username为自定义的用户名;host为登录域名,host为’%’时表示为 任意IP…

    Python开发 2023年4月2日
    00
  • flask操作数据库

    flask操作数据库 准备工作 安装flask-script(版本过高可能会报错) pip install flask-script==2.0.3 使用flask-script里的Manager类实例化来管理项目的启动等 from apps import create_app from flask_script import Manager app = cr…

    2023年4月2日
    00
  • 微信小程序的点击事件、页面跳转、数据绑定、数据修改、获取用户信息及定位、for指令、获取用户上传图片

    小程序中实现页面跳转 对标签绑定点击事件 data是点击时传入的参数 <view bindtap=”clickMe” data-nid=”123″ data-name=”SD” >点我跳转</view> /** * 用户点击事件 */ clickMe(e){ console.log(e) var nid = e.currentTarg…

    Python开发 2023年4月2日
    00
  • 进程

    1 什么是进程 进程是系统进行资源分配和调度的基本单位,进程表示程序正在执行的过程,是‘活的’,而程序就是一推躺在硬盘上的代码,是‘死的’。 2 进程的调度 1.先来先服务调度算法:对长作业有利,对短作业无利2.短作业优先调度算法:对短作业有利,对长作业无利3.时间片轮转法+多级反馈队列该方法是指,将时间片切成n份,每一份表示一个时间片,这些时间片有一个优先…

    2023年4月2日
    00
合作推广
合作推广
分享本页
返回顶部