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的Flask框架实现视频的流媒体传输
Mar 31 Python
浅谈Python中的闭包
Jul 08 Python
Python自动登录126邮箱的方法
Jul 10 Python
python pandas 组内排序、单组排序、标号的实例
Apr 12 Python
pandas.DataFrame.to_json按行转json的方法
Jun 05 Python
使用Python处理BAM的方法
Sep 28 Python
python去重,一个由dict组成的list的去重示例
Jan 21 Python
python-opencv获取二值图像轮廓及中心点坐标的代码
Aug 27 Python
利用django model save方法对未更改的字段依然进行了保存
Mar 28 Python
python3用PyPDF2解析pdf文件,用正则匹配数据方式
May 12 Python
python 自动识别并连接串口的实现
Jan 19 Python
Python字符串的转义字符
Apr 07 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数组实例总结与说明
2011/08/23 PHP
有关PHP中MVC的开发经验分享
2012/05/17 PHP
PHP快速推送微信模板消息
2017/04/14 PHP
PHP实现的自定义图像居中裁剪函数示例【测试可用】
2017/08/11 PHP
Prototype 1.5.0_rc1 及 Prototype 1.5.0 Pre0小抄本
2006/09/22 Javascript
Apply an AutoFormat to an Excel Spreadsheet
2007/06/12 Javascript
利用javascript移动div层-javascript 拖动层
2009/03/22 Javascript
cookie丢失问题(认证失效) Authentication (用户验证信息)也会丢失
2009/06/04 Javascript
基于Jquery+Ajax+Json的高效分页实现代码
2011/10/29 Javascript
Jquery利用mouseenter和mouseleave实现鼠标经过弹出层且可以点击
2014/02/12 Javascript
jQuery实现的原图对比窗帘效果
2014/06/15 Javascript
基于Angularjs+mybatis实现二级评论系统(仿简书)
2017/02/13 Javascript
用vue和node写的简易购物车实现
2017/04/25 Javascript
node.js中http模块和url模块的简单介绍
2017/10/06 Javascript
VUE element-ui 写个复用Table组件的示例代码
2017/11/18 Javascript
vue自定义全局组件(自定义插件)的用法
2018/01/30 Javascript
详解Angular系列之变化检测(Change Detection)
2018/02/26 Javascript
vue实现类似淘宝商品评价页面星级评价及上传多张图片功能
2018/10/29 Javascript
vue使用Font Awesome的方法步骤
2019/02/26 Javascript
从零搭一个自用的前端脚手架的方法步骤
2019/09/23 Javascript
js计时事件实现圆形时钟
2020/03/25 Javascript
js+canvas实现两张图片合并成一张图片的方法
2019/11/01 Javascript
js实现数字从零慢慢增加到指定数字示例
2019/11/07 Javascript
vue实现标签云效果的示例
2020/11/09 Javascript
微信小程序实现modal弹出框遮罩层组件(可带文本框)
2020/12/20 Javascript
Python中模块string.py详解
2017/03/12 Python
Python3.5面向对象编程图文与实例详解
2019/04/24 Python
Python使用sys.exc_info()方法获取异常信息
2020/07/23 Python
英国家电购物网站:Sonic Direct
2019/03/26 全球购物
安踏官方商城:anta.cn
2019/12/16 全球购物
广播电视新闻学专业应届生求职信
2013/10/08 职场文书
银行竞聘报告范文
2014/11/06 职场文书
2015年大学组织委员个人工作总结
2015/10/23 职场文书
原来实习报告是这样写的呀!
2019/07/03 职场文书
入伍志愿书怎么写?
2019/07/19 职场文书
MySQL sql模式设置引起的问题
2022/05/15 MySQL