Python Socket TCP双端聊天功能实现过程详解


Posted in Python onJune 15, 2020

SOCKET编程

  • socket(套接字):是一个网络通信的端点,能实现不同主机的进程通信, -通过IP+端口定位对方并发送消息的通信机制
  • 分为UDP和TCP
  • 客户端Client: 发起访问的一-方
  • 服务器端Server: 接受访问的一方

UDP编程

Server端流程

1.建立socket,socket是负贵具体通信的一个实例

2.绑定,为创建的socket指派固定的端口和ip地址

3.接受对方发送内容

4.给对方发送反馈,此步骤为非必须步骤

Client端流程

1.建立通信的socket

2.发送内容到指定服务器

3.接受服务器给定的反馈内容

  • 服务器案例v01
  • 客户端案例v02
  • 服务器程序要求永久运行,一般用死循环处理
  • 改造的服务器版本v03

TCP编程

  • 面向连接的传输,即每次传输之前需要建立一个连接
  • 客户端和服务端两个程序需要编写

Server端的编写流程

1.建立Socket负责具体通信。这个socket其实只负责接受对方的请求

2.绑定端口和地址

3.监听接入的访问Socket

4.接受访问的Socket,可以理解接受访问即建立了一个通讯的链路通路

5.接受对方的发送内容,利用接收到的Socket接受内容

6.如果有必要,给对方发送反馈信息

7.关闭链路通路

Client端流程

1.建立通信socket

2.链接对方,请求跟对方建立通路

3.发送内容到对方服务器

4.接受对方的反馈

5.关闭链接通路

Server端:

import socket

def tcp_server():
  # 1、建立socket负责具体通信,这个和socket其实只负责接受对方的请求,真通信的是连接后
  # socket.AF_INET:使用ipv4协议
  # socket.SOCK_STREAM:使用tcp连接
  sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
  # 2、绑定IP以及端口
  addr = ("192.168.200.2", 1914)
  sock.bind(addr)
  # 3、监听接入的访问socket
  sock.listen()

  while True:
    # 4、接受访问的Socket 可以理解接受访问即建立了一个通讯的连接通路
    # accept 返回的元祖第一个元素赋值给SKT,利用接受到的socket接受内容
    skt, addr = sock.accept() # 建立通道
    # 5、接受对方发送的内容、利用接受到的socket接受内容
    # 500 表示接受使用的buffersize
    # mgs = skt.receive(500)
    mgs = skt.recv(500)
    # 接受到的是bytes格式内容
    # 想得到str格式的,需要进行解码
    msg = mgs.decode()
    print(msg)
    data = f'我已经收到了'
    # print(data)
    # 6、如果有必要、给对方反馈信息
    skt.send(data.encode())
    skt.close()
if __name__ == '__main__':
  print("tcpstaring......")
  tcp_server()
  print("tcpstoping......")

client端

import socket


def tcp_client():
  a = 0
  while a < 100:
    # 1、建立通信socket
    sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    addr = ("192.168.200.2", 1914)
    sock.connect(addr)
    data = f"{a}你好 我是client,你收到了么?"
    sock.send(data.encode())
    rst = sock.recv(500)
    print(rst.decode())
    sock.close()
    a+=1

if __name__ == '__main__':
  tcp_client()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python中Django框架利用url来控制登录的方法
Jul 25 Python
Python生成随机验证码的两种方法
Dec 22 Python
理解Python垃圾回收机制
Feb 12 Python
python3.0 模拟用户登录,三次错误锁定的实例
Nov 02 Python
transform python环境快速配置方法
Sep 27 Python
python 实现读取一个excel多个sheet表并合并的方法
Feb 12 Python
利用Python进行图像的加法,图像混合(附代码)
Jul 14 Python
Django 用户认证组件使用详解
Jul 23 Python
使用Pandas对数据进行筛选和排序的实现
Jul 29 Python
Python集合基本概念与相关操作实例分析
Oct 30 Python
Python 实现向word(docx)中输出
Feb 13 Python
Keras实现将两个模型连接到一起
May 23 Python
Python实现验证码识别
Jun 15 #Python
Python Tkinter图形工具使用方法及实例解析
Jun 15 #Python
使用Keras画神经网络准确性图教程
Jun 15 #Python
在tensorflow下利用plt画论文中loss,acc等曲线图实例
Jun 15 #Python
python中元组的用法整理
Jun 15 #Python
详解Python设计模式之策略模式
Jun 15 #Python
python能做哪方面的工作
Jun 15 #Python
You might like
PHP截取中文字符串的问题
2006/07/12 PHP
php 动态多文件上传
2009/01/18 PHP
二招解决php乱码问题
2012/03/25 PHP
在PHP中设置、使用、删除Cookie的解决方法
2013/05/06 PHP
ThinkPHP模板引擎之导入资源文件方法详解
2014/06/18 PHP
ThinkPHP3.1新特性之动态设置自动完成及自动验证示例代码
2014/06/23 PHP
PHP图片处理之图片旋转和图片翻转实例
2014/11/19 PHP
php基于表单密码验证与HTTP验证用法实例
2015/01/06 PHP
jQuery.fn和jQuery.prototype区别介绍
2013/10/05 Javascript
javascript实现复制与粘贴操作实例
2014/10/16 Javascript
javascript异步处理工作机制详解
2015/04/13 Javascript
js实现兼容IE和FF的上下层的移动
2015/05/04 Javascript
jQuery实现下拉框选择图片功能实例
2015/08/08 Javascript
javascript replace()第二个参数为函数时的参数用法
2016/12/26 Javascript
jQuery实现动态生成表格并为行绑定单击变色动作的方法
2017/04/17 jQuery
微信小程序教程系列之视图层的条件渲染(10)
2017/04/19 Javascript
简单实现jQuery弹幕效果
2017/05/06 jQuery
linux 下以二进制的方式安装 nodejs
2020/02/12 NodeJs
python中的函数用法入门教程
2014/09/02 Python
python中global用法实例分析
2015/04/30 Python
react+django清除浏览器缓存的几种方法小结
2019/07/17 Python
Python图像处理库PIL的ImageDraw模块介绍详解
2020/02/26 Python
Python批量安装卸载1000个apk的方法
2020/04/10 Python
Python接口自动化系列之unittest结合ddt的使用教程详解
2021/02/23 Python
世界最大的海报和艺术印刷商店:AllPosters.com
2017/02/01 全球购物
MAC彩妆英国官网:M·A·C UK
2018/05/30 全球购物
伦敦剧院门票:From The Box Office
2018/06/30 全球购物
英国工作场所设备购买网站:Slingsby
2019/05/03 全球购物
大学同学聚会邀请函
2014/01/19 职场文书
护士的自我鉴定
2014/02/07 职场文书
关于安全的演讲稿
2014/05/09 职场文书
2014年助理政工师工作总结
2014/12/19 职场文书
红色革命电影观后感
2015/06/18 职场文书
2019新员工试用期转正工作总结范文
2019/08/21 职场文书
详解用Python把PDF转为Word方法总结
2021/04/27 Python
Nginx跨域问题解析与解决
2022/08/05 Servers