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类继承与子类实例初始化用法分析
Apr 17 Python
Django中使用group_by的方法
May 26 Python
Python进阶-函数默认参数(详解)
May 18 Python
浅谈Python中的可迭代对象、迭代器、For循环工作机制、生成器
Mar 11 Python
简单了解python反射机制的一些知识
Jul 13 Python
Python多线程多进程实例对比解析
Mar 12 Python
TensorFlow固化模型的实现操作
May 26 Python
Keras实现支持masking的Flatten层代码
Jun 16 Python
Python xlrd/xlwt 创建excel文件及常用操作
Sep 24 Python
pytorch中的numel函数用法说明
May 13 Python
pytorch model.cuda()花费时间很长的解决
Jun 01 Python
Anaconda安装pytorch及配置PyCharm 2021环境
Jun 04 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图像处理之imagecreate、imagedestroy函数介绍
2014/11/19 PHP
PHP利用Socket获取网站的SSL证书与公钥
2017/06/18 PHP
用js实现的仿sohu博客更换页面风格(简单版)
2007/03/22 Javascript
JavaScript 继承详解(二)
2009/07/13 Javascript
页面刷新时记住滚动条的位置jquery代码
2014/06/17 Javascript
在HTML中插入JavaScript代码的示例
2015/06/03 Javascript
使用Chrome浏览器调试AngularJS应用的方法
2015/06/18 Javascript
利用BootStrap弹出二级对话框的简单实现方法
2016/09/21 Javascript
利用jquery实现实时更新歌词的方法
2017/01/06 Javascript
ajax实现动态下拉框示例
2017/01/10 Javascript
详解vue-router和vue-cli以及组件之间的传值
2017/07/04 Javascript
Bootstrap modal只加载一次数据的解决办法(推荐)
2017/11/24 Javascript
vue2.0$nextTick监听数据渲染完成之后的回调函数方法
2018/09/11 Javascript
浅谈关于iview表单验证的问题
2018/09/29 Javascript
element ui table(表格)实现点击一行展开功能
2018/12/04 Javascript
微信小程序webview实现长按点击识别二维码功能示例
2019/01/24 Javascript
从零开始在vue-cli4配置自适应vw布局的实现
2020/06/08 Javascript
如何通过vscode运行调试javascript代码
2020/07/24 Javascript
关于angular引入ng-zorro的问题浅析
2020/09/09 Javascript
详解Python下载图片并保存本地的两种方式
2019/05/15 Python
Python在OpenCV里实现极坐标变换功能
2019/09/02 Python
PyCharm下载和安装详细步骤
2019/12/17 Python
Django多层嵌套ManyToMany字段ORM操作详解
2020/05/19 Python
Java ExcutorService优雅关闭方式解析
2020/05/30 Python
python实现一个简单RPC框架的示例
2020/10/28 Python
CSS3中的content属性使用示例
2015/07/20 HTML / CSS
HTML5 canvas实现的静态循环滚动播放弹幕
2021/01/05 HTML / CSS
Perfume’s Club德国官网:在线购买香水
2019/04/08 全球购物
说说在weblogic中开发消息Bean时的persistent与non-persisten的差别
2013/04/07 面试题
军训自我鉴定
2014/01/22 职场文书
简历的自我评价范文
2014/02/04 职场文书
公司领导九九重阳节发言稿2014
2014/09/25 职场文书
2019年国庆祝福语(70句)
2019/09/19 职场文书
Nginx同一个域名配置多个项目的实现方法
2021/03/31 Servers
微信小程序scroll-view不能左右滑动问题的解决方法
2021/07/09 Javascript
详解JavaScript中Arguments对象用途
2021/08/30 Javascript