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,聊天
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
菜鸟课堂:玩转MySQL数据库 性能优化八法
2009-03-25 14:44:00
Scrapy爬虫框架集成selenium及全面详细讲解
2021-07-28 18:47:09
![](https://img.aspxhome.com/file/2023/2/95832_0s.jpg)
mysql UNIX时间戳与日期的相互转换
2010-02-10 12:10:00
Python实现程序判断季节的代码示例
2022-04-04 13:30:22
![](https://img.aspxhome.com/file/2023/1/76941_0s.png)
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
![](https://img.aspxhome.com/file/2023/0/96970_0s.jpg)
使用phpMyAdmin进行mysql数据库备份和还原的方法
2008-10-13 20:56:00
![](https://img.aspxhome.com/file/uploadpic/200810/13/2008101321111543.jpg)
Python内置数据结构列表与元组示例详解
2021-08-17 21:28:14
![](https://img.aspxhome.com/file/2023/1/78801_0s.png)
关于Python错误重试方法总结
2023-05-10 23:42:09
![](https://img.aspxhome.com/file/2023/3/91913_0s.png)
JavaScript 颜色梯度和渐变效果
2009-03-18 11:16:00
![](https://img.aspxhome.com/file/UploadPic/20093/18/ColorGrads-46s.gif)
什么样的分页案例才是好的
2007-11-23 19:08:00
![](https://img.aspxhome.com/file/UploadPic/up/2007112319363210.jpg)
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
![](https://img.aspxhome.com/file/2023/1/87941_0s.png)
python从gbff文件中直接提取cds序列
2023-05-29 16:10:35
Python实现绘制圣诞树和烟花的示例代码
2022-03-22 16:22:20
![](https://img.aspxhome.com/file/2023/3/66423_0s.png)