基于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日

相关文章

  • 免费课页面前端搭建和后端课程分类接口、课程群查接口设计

    免费课页面前端搭建 点击查看代码 <template> <div class=”course”> <Header></Header> <div class=”main”> <!– 筛选条件 –> <div class=”condition”> <ul class=”…

    Python开发 2023年4月2日
    00
  • 进程、线程补充与协程相关介绍

    补充点 1.死锁 当你知道锁的使用抢锁必须要释放锁,其实你在操作锁的时候也极其容易产生死锁现象(整个程序卡死 阻塞) from threading import Thread, Lock import time mutexA = Lock() mutexB = Lock() # 类只要加括号多次 产生的肯定是不同的对象 # 如果你想要实现多次加括号等到的是相…

    Python开发 2023年4月2日
    00
  • 文章添加页(富文本编辑器的使用)

    1.文章添加页url开设 2.添加文章页面已经富文本编辑器的使用 富文本编辑器kindeditor只要到官网下载下来,放入static文件夹就行,如何在html的script处添加对应固定代码 {% extends ‘backend/base.html’ %} {% block article %} <h3>添加随笔</h3> &lt…

    2023年4月2日
    00
  • flask蓝图与项目一般结构

    flask一般项目结构 初始化配置flask项目时,路由和视图是放在启动文件里的,这样不太方便我们后期的整理和查阅! 因此,我们需要将项目启动文件和路由视图分开处理! 在项目文件下创建一个apps的包,在包的初始化文件里定义一个函数,用来实现app相关的功能 init.py from flask import Flask import settings de…

    Python开发 2023年4月2日
    00
  • 路飞项目前端主页搭建

    前端主页 图片准备 首先把主页需要到图片资源放到项目的img文件夹下 页头组件:components/Header.vue <template> <div class=”header”> <div class=”slogan”> <p>老男孩IT教育 | 帮助有志向的年轻人通过努力学习获得体面的工作和生活&lt…

    2023年4月2日
    00
  • 基于django中间件的编程思想

    基于django中间件的编程思想 在django中,中间件的形式全部写成了列表套字符串的形式 MIDDLEWARE = [ ‘django.middleware.security.SecurityMiddleware’, ‘django.contrib.sessions.middleware.SessionMiddleware’, ‘django.middl…

    2023年4月2日
    00
  • 修改密码弹出框搭建

    前端代码搭建 主要利用的是bootstrap3中js插件里的模态框版块 <li><a href=”” data-toggle=”modal” data-target=”.bs-example-modal-lg”>修改密码</a></li> <div class=”modal fade bs-example…

    Python开发 2023年4月2日
    00
  • django中的视图层

    1.什么是视图层 简单来说,就是用来接收路由层传来的请求,从而做出相应的响应返回给浏览器 2.视图层的格式与参数说明 2.1基本格式 from django.http import HttpResponse def page_2003(request): html = ‘<h1>第一个网页</h1>’ return HttpRespo…

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