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 (2)
Oct 31 Python
python赋值操作方法分享
Mar 23 Python
Python使用time模块实现指定时间触发器示例
May 18 Python
利用Python进行异常值分析实例代码
Dec 07 Python
Python实现将json文件中向量写入Excel的方法
Mar 26 Python
Python实现图片拼接的代码
Jul 02 Python
pycharm 配置远程解释器的方法
Oct 28 Python
python模拟登陆,用session维持回话的实例
Dec 27 Python
python通过SSH登陆linux并操作的实现
Oct 10 Python
TensorFlow固化模型的实现操作
May 26 Python
如何表示python中的相对路径
Jul 08 Python
AI:如何训练机器学习的模型
Apr 16 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
PHP4与PHP5的时间格式问题
2008/02/17 PHP
PHP使用Session遇到的一个Permission denied Notice解决办法
2014/07/30 PHP
详谈PHP中public,private,protected,abstract等关键字的用法
2017/12/31 PHP
js批量设置样式的三种方法不推荐使用with
2013/02/25 Javascript
jQuery实现宽屏图片轮播实例教程
2015/11/24 Javascript
javascript实现数字倒计时特效
2016/03/30 Javascript
javascript检查某个元素在数组中的索引值
2016/03/30 Javascript
网页前端登录js按Enter回车键实现登陆的两种方法
2016/05/10 Javascript
vuejs在解析时出现闪烁的原因及防止闪烁的方法
2016/09/19 Javascript
js/jquery控制页面动态加载数据 滑动滚动条自动加载事件的方法
2017/02/08 Javascript
浅谈在koa2中实现页面渲染的全局数据
2017/10/09 Javascript
关于Google发布的JavaScript代码规范你要知道哪些
2018/04/04 Javascript
基于jquery实现左右上下移动效果
2018/05/02 jQuery
jquery使用echarts实现有向图可视化功能示例
2019/11/25 jQuery
vue实现编辑器键盘抬起时内容跟随光标距顶位置向上滚动效果
2020/05/28 Javascript
原生js实现自定义滚动条组件
2021/01/20 Javascript
python脚本实现查找webshell的方法
2014/07/31 Python
解决Python的str强转int时遇到的问题
2018/04/09 Python
python中栈的原理及实现方法示例
2019/11/27 Python
CSS3教程(3):border-color网页边框色彩
2009/04/02 HTML / CSS
HTML5进度条特效
2014/12/18 HTML / CSS
YBF Beauty官网:美丽挚友,美国知名彩妆品牌
2020/11/22 全球购物
Linux中如何设置Java环境变量(Ubuntu)
2016/07/24 面试题
华为的Java面试题
2014/03/07 面试题
公司营业员的工作总结自我评价
2013/10/05 职场文书
缓刑人员的思想汇报
2014/01/11 职场文书
先进班组材料范文
2014/12/25 职场文书
大学生在校表现评语
2014/12/31 职场文书
学校拾金不昧表扬信
2015/01/16 职场文书
2015年社区矫正工作总结
2015/04/21 职场文书
项目战略合作意向书
2015/05/08 职场文书
机械生产实习心得体会
2016/01/22 职场文书
《草虫的村落》教学反思
2016/02/20 职场文书
用几道面试题来看JavaScript执行机制
2021/04/30 Javascript
Oracle中update和select 关联操作
2022/01/18 Oracle
python+pytest接口自动化之token关联登录的实现
2022/04/06 Python