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压缩文件夹内所有文件为zip文件的方法
Jun 20 Python
在Mac OS系统上安装Python的Pillow库的教程
Nov 20 Python
Python单元测试简单示例
Jul 03 Python
基于python全局设置id 自动化测试元素定位过程解析
Sep 04 Python
python网络爬虫 Scrapy中selenium用法详解
Sep 28 Python
Python进程,多进程,获取进程id,给子进程传递参数操作示例
Oct 11 Python
如何分离django中的媒体、静态文件和网页
Nov 12 Python
使用python的turtle绘画滑稽脸实例
Nov 21 Python
有趣的Python图片制作之如何用QQ好友头像拼接出里昂
Apr 22 Python
pycharm激活码2020最新分享适用pycharm2020最新版亲测可用
Nov 22 Python
python opencv图像处理(素描、怀旧、光照、流年、滤镜 原理及实现)
Dec 10 Python
Python tensorflow卷积神经Inception V3网络结构
May 06 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
一个好用的分页函数
2006/11/16 PHP
php实现单链表的实例代码
2013/03/22 PHP
基于递归实现的php树形菜单代码
2014/11/19 PHP
PHP对文件夹递归执行chmod命令的方法
2015/06/19 PHP
php与c 实现按行读取文件实例代码
2017/01/03 PHP
php类自动装载、链式操作、魔术方法实现代码
2017/07/23 PHP
PHP的RSA加密解密方法以及开发接口使用
2018/02/11 PHP
PHP mkdir创建文件夹实现方法解析
2020/11/13 PHP
js 强制弹出窗口代码研究-又一款代码
2010/03/20 Javascript
JavaScript接口实现代码 (Interfaces In JavaScript)
2010/06/11 Javascript
让网页跳转到指定位置的jquery代码非书签
2013/09/06 Javascript
原生JS可拖动弹窗效果实例代码
2013/11/09 Javascript
jquery JSON的解析方式示例介绍
2014/07/27 Javascript
javascript实现复选框选中属性
2015/03/25 Javascript
JavaScript使用shift方法移除素组第一个元素实例分析
2015/04/06 Javascript
JavaScript中constructor()方法的使用简介
2015/06/05 Javascript
Js的Array数组对象详解
2016/02/22 Javascript
JavaScript的instanceof运算符学习教程
2016/06/08 Javascript
webpack4.x下babel的安装、配置及使用详解
2019/03/07 Javascript
vue-property-decorator用法详解
2019/12/12 Javascript
JS中类的静态方法,静态变量,实例方法,实例变量区别与用法实例分析
2020/03/14 Javascript
用webAPI实现图片放大镜效果
2020/11/23 Javascript
[02:41]DOTA2亚洲邀请赛小组赛第三日 赛事回顾
2015/02/01 DOTA
[58:21]DOTA2亚洲邀请赛 4.3 突围赛 Liquid vs VGJ.T 第二场
2018/04/04 DOTA
python字典DICT类型合并详解
2017/08/17 Python
详解python实现数据归一化处理的方式:(0,1)标准化
2019/07/17 Python
使用pytorch搭建AlexNet操作(微调预训练模型及手动搭建)
2020/01/18 Python
Python unittest工作原理和使用过程解析
2020/02/24 Python
Django Channel实时推送与聊天的示例代码
2020/04/30 Python
一文弄懂Pytorch的DataLoader, DataSet, Sampler之间的关系
2020/07/03 Python
UNDONE手表官网:世界领先的定制手表品牌
2018/11/13 全球购物
求职简历的自我评价
2014/01/31 职场文书
安全标准化实施方案
2014/02/20 职场文书
党课知识竞赛主持词
2014/04/01 职场文书
成本会计实训报告
2014/11/05 职场文书
2016三严三实专题教育活动心得体会
2016/01/06 职场文书