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之玩转字符串(1)
Sep 14 Python
跟老齐学Python之集合(set)
Sep 24 Python
python itchat实现微信自动回复的示例代码
Aug 14 Python
zookeeper python接口实例详解
Jan 18 Python
基于python OpenCV实现动态人脸检测
May 25 Python
Python OpenCV实现鼠标画框效果
Aug 19 Python
Flask框架学习笔记之表单基础介绍与表单提交方式
Aug 12 Python
Python 进程操作之进程间通过队列共享数据,队列Queue简单示例
Oct 11 Python
python NumPy ndarray二维数组 按照行列求平均实例
Nov 26 Python
python 解决flask uwsgi 获取不到全局变量的问题
Dec 22 Python
Python3爬虫里关于识别微博宫格验证码的知识点详解
Jul 30 Python
python 用pandas实现数据透视表功能
Dec 21 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
wordpress自定义url参数实现路由功能的代码示例
2013/11/28 PHP
PHP对象相互引用的内存溢出实例分析
2014/08/28 PHP
PHP的Yii框架的基本使用示例
2015/08/21 PHP
PHP实现微信图片上传到服务器的方法示例
2017/06/29 PHP
用JavaScript脚本实现Web页面信息交互
2006/12/21 Javascript
JavaScript面象对象设计
2008/04/28 Javascript
模仿JQuery sortable效果 代码有错但值得看看
2009/11/05 Javascript
js和jquery批量绑定事件传参数一(新猪猪原创)
2010/06/23 Javascript
Javascript this 的一些学习总结
2012/08/31 Javascript
javascript获取当前鼠标坐标的方法
2015/01/10 Javascript
JavaScript中使用自然对数ln的方法
2015/06/14 Javascript
JS匿名函数实例分析
2016/11/26 Javascript
一句jQuery代码实现返回顶部效果(简单实用)
2016/12/28 Javascript
谈谈Vue.js——vue-resource全攻略
2017/01/16 Javascript
jQuery EasyUI 组件加上“清除”功能实例详解
2017/04/11 jQuery
vue移动端实现红包雨效果
2020/06/23 Javascript
vue插件开发之使用pdf.js实现手机端在线预览pdf文档的方法
2018/07/12 Javascript
JavaScript中toLocaleString()和toString()的区别实例分析
2018/08/14 Javascript
ES6的解构赋值实例详解
2019/05/06 Javascript
webpack4 optimization使用总结
2019/11/10 Javascript
JS代码检查工具ESLint介绍与使用方法
2020/02/04 Javascript
解决vue 退出动画无效的问题
2020/08/09 Javascript
Python异常处理总结
2014/08/15 Python
python返回昨天日期的方法
2015/05/13 Python
Python matplotlib绘图可视化知识点整理(小结)
2018/03/16 Python
Python实现的根据文件名查找数据文件功能示例
2018/05/02 Python
python跳出双层for循环的解决方法
2019/06/24 Python
Python高级property属性用法实例分析
2019/11/19 Python
python实现俄罗斯方块小游戏
2020/04/24 Python
Python脚本实现监听服务器的思路代码详解
2020/05/28 Python
python新手学习可变和不可变对象
2020/06/11 Python
python 实现一个简单的线性回归案例
2020/12/17 Python
Intersport西班牙:在线体育商店
2019/11/06 全球购物
会计助理的岗位职责
2013/11/29 职场文书
喷漆工的岗位职责
2014/03/17 职场文书
小学生安全教育心得体会
2016/01/15 职场文书