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基础教程
Feb 05 Python
用 Python 爬了爬自己的微信朋友(实例讲解)
Aug 25 Python
Python 2.x如何设置命令执行的超时时间实例
Oct 19 Python
python实现聊天小程序
Mar 13 Python
Python中pandas dataframe删除一行或一列:drop函数详解
Jul 03 Python
numpy的文件存储.npy .npz 文件详解
Jul 09 Python
python高效过滤出文件夹下指定文件名结尾的文件实例
Oct 21 Python
浅谈Python编程中3个常用的数据结构和算法
Apr 30 Python
使用Keras实现Tensor的相乘和相加代码
Jun 18 Python
Python 捕获代码中所有异常的方法
Aug 03 Python
Django用户认证系统如何实现自定义
Nov 12 Python
python实现控制台输出颜色
Mar 02 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
盘点被央视点名过的日本动画电影 一部比一部强
2020/03/08 日漫
PHP写的资源下载防盗链类分享
2014/05/12 PHP
Thinkphp极验滑动验证码实现步骤解析
2020/11/24 PHP
php框架知识点的整理和补充
2021/03/01 PHP
jquery中的$(document).ready()与window.onload的区别
2009/11/18 Javascript
玩转jQuery按钮 请告诉我你最喜欢哪些?
2012/01/08 Javascript
js限制文本框输入长度两种限制方式(长度、字节数)
2012/12/19 Javascript
如何减少浏览器的reflow和repaint
2015/02/26 Javascript
内容滑动切换效果jquery.hwSlide.js插件封装
2016/07/07 Javascript
Bootstrap实现圆角、圆形头像和响应式图片
2016/12/14 Javascript
nodejs中安装ghost出错的原因及解决方法
2017/10/23 NodeJs
微信小程序用户自定义模版用法实例分析
2017/11/28 Javascript
关于laydate.js加载laydate.css路径错误问题解决
2017/12/27 Javascript
JS使用栈判断给定字符串是否是回文算法示例
2019/03/04 Javascript
七行JSON代码把你的网站变成移动应用过程详解
2019/07/09 Javascript
Vue.js组件props数据验证实现详解
2019/10/19 Javascript
Vue-cli打包后部署到子目录下的路径问题说明
2020/09/02 Javascript
vue自定义插件封装,实现简易的elementUi的Message和MessageBox的示例
2020/11/20 Vue.js
[01:00:14]DOTA2-DPC中国联赛 正赛 Ehome vs Elephant BO3 第二场 2月28日
2021/03/11 DOTA
python中二维阵列的变换实例
2014/10/09 Python
Python 遍历列表里面序号和值的方法(三种)
2017/02/17 Python
Python的装饰器使用详解
2017/06/26 Python
使用Python写一个小游戏
2018/04/02 Python
Python Tkinter模块实现时钟功能应用示例
2018/07/23 Python
Win8.1下安装Python3.6提示0x80240017错误的解决方法
2018/07/31 Python
在python3中pyqt5和mayavi不兼容问题的解决方法
2019/01/08 Python
详解Python3 基本数据类型
2019/04/19 Python
pandas 层次化索引的实现方法
2019/07/06 Python
opencv调整图像亮度对比度的示例代码
2019/09/27 Python
Python使用tkinter模块实现推箱子游戏
2019/10/08 Python
浅谈three.js中的needsUpdate的应用
2012/11/12 HTML / CSS
医学生个人求职信范文
2013/09/24 职场文书
战略合作意向书范本
2014/04/01 职场文书
主要负责人任命书
2014/06/06 职场文书
校园活动策划方案
2014/06/13 职场文书
2015初中教导处工作总结
2015/07/21 职场文书