Python Socket TCP双端聊天功能实现过程详解

作者:阿久丶xin 时间:2022-03-13 02:25:44 

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()

来源:https://www.cnblogs.com/laod/p/13025825.html

标签:Python,Socket,TCP,聊天
0
投稿

猜你喜欢

  • 菜鸟课堂:玩转MySQL数据库 性能优化八法

    2009-03-25 14:44:00
  • Scrapy爬虫框架集成selenium及全面详细讲解

    2021-07-28 18:47:09
  • mysql UNIX时间戳与日期的相互转换

    2010-02-10 12:10:00
  • Python实现程序判断季节的代码示例

    2022-04-04 13:30:22
  • sqlserver主键设计的注意点

    2012-08-21 10:42:44
  • Python 多进程并发操作中进程池Pool的实例

    2022-06-28 16:31:37
  • 在SQL触发器或存储过程中获取在程序登录的用户

    2012-01-29 18:01:32
  • python+excel接口自动化获取token并作为请求参数进行传参操作

    2022-05-19 04:10:18
  • 使用phpMyAdmin进行mysql数据库备份和还原的方法

    2008-10-13 20:56:00
  • Python内置数据结构列表与元组示例详解

    2021-08-17 21:28:14
  • 关于Python错误重试方法总结

    2023-05-10 23:42:09
  • JavaScript 颜色梯度和渐变效果

    2009-03-18 11:16:00
  • 什么样的分页案例才是好的

    2007-11-23 19:08:00
  • python 寻找优化使成本函数最小的最优解的方法

    2023-03-02 16:42:39
  • Dreamweaver MX 2004 制作树状菜单教程[动画]

    2010-03-25 12:24:00
  • 破解 屏蔽 防框架代码 top.location != self.location

    2008-11-27 12:59:00
  • oracle 树查询 语句

    2009-07-17 18:20:00
  • python中apply函数详情

    2023-06-03 14:58:15
  • python从gbff文件中直接提取cds序列

    2023-05-29 16:10:35
  • Python实现绘制圣诞树和烟花的示例代码

    2022-03-22 16:22:20
  • asp之家 网络编程 m.aspxhome.com