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 MD5文件生成码
Jan 12 Python
解析Python编程中的包结构
Oct 25 Python
对Python进行数据分析_关于Package的安装问题
May 22 Python
Python字符串格式化%s%d%f详解
Feb 02 Python
Python 实现删除某路径下文件及文件夹的实例讲解
Apr 24 Python
TensorFlow数据输入的方法示例
Jun 19 Python
Python占用的内存优化教程
Jul 28 Python
Pytorch在NLP中的简单应用详解
Jan 08 Python
opencv python Canny边缘提取实现过程解析
Feb 03 Python
python Matplotlib数据可视化(2):详解三大容器对象与常用设置
Sep 30 Python
Window10上Tensorflow的安装(CPU和GPU版本)
Dec 15 Python
matplotlib之pyplot模块坐标轴标签设置使用(xlabel()、ylabel())
Feb 22 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中用数组的方法设置cookies
2011/04/21 PHP
php数组索引与键值操作技巧实例分析
2015/06/24 PHP
在WordPress的后台中添加顶级菜单和子菜单的函数详解
2016/01/11 PHP
php 在字符串指定位置插入新字符的简单实现
2016/06/28 PHP
Laravel最佳分割路由文件(routes.php)的方式
2016/08/04 PHP
php提供实现反射的方法和实例代码
2019/09/17 PHP
PHP PDO和消息队列的个人理解与应用实例分析
2019/11/25 PHP
如何在PHP中使用数组
2020/06/09 PHP
获取DOM对象的几种扩展及简写
2006/10/09 Javascript
javascript字符串拼接的效率问题
2010/12/25 Javascript
JS案例分享之金额小写转大写
2014/05/15 Javascript
批量修改标签css样式以input标签为例
2014/07/31 Javascript
css与javascript跨浏览器兼容性总结
2014/09/15 Javascript
深入探讨JavaScript String对象
2015/03/09 Javascript
jQuery.Highcharts.js绘制柱状图饼状图曲线图
2015/03/14 Javascript
详细解读AngularJS中的表单验证编程
2015/06/19 Javascript
url传递的参数值中包含&amp;时,url自动截断问题的解决方法
2016/08/02 Javascript
Angularjs中$http以post请求通过消息体传递参数的实现方法
2016/08/05 Javascript
详解Angular.js中$http拦截器的介绍及使用
2017/07/04 Javascript
从源码看angular/material2 中 dialog模块的实现方法
2017/10/18 Javascript
Angular js 实现添加用户、修改密码、敏感字、下拉菜单的综合操作方法
2017/10/24 Javascript
用React实现一个完整的TodoList的示例代码
2017/10/30 Javascript
详解从react转职到vue开发的项目准备
2019/01/14 Javascript
JS变量提升原理与用法实例浅析
2020/05/22 Javascript
python函数参数*args**kwargs用法实例
2013/12/04 Python
python搭建服务器实现两个Android客户端间收发消息
2018/04/12 Python
python实现将读入的多维list转为一维list的方法
2018/06/28 Python
TensorFlow2.0:张量的合并与分割实例
2020/01/19 Python
Python中的全局变量如何理解
2020/06/04 Python
pycharm 实现本地写代码,服务器运行的操作
2020/06/08 Python
Python OpenCV去除字母后面的杂线操作
2020/07/05 Python
如何用Python 实现全连接神经网络(Multi-layer Perceptron)
2020/10/15 Python
五四演讲稿范文
2014/09/03 职场文书
工地材料员岗位职责
2015/04/11 职场文书
导游词之海南-南湾猴岛
2019/10/12 职场文书
Python基础之Socket通信原理
2021/04/22 Python