python3 socket网络通信的整个流程
端口+IP能够确定一台电脑上的某一个应用程序
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
# coding=utf-8
import socket
server = socket.socket() # 相当于创建了一部电话
ip_port = ('127.0.0.1', 8001) # 创建一个电话卡, 是元组类型
server.bind(ip_port) # 插上电话卡
'''
监听着电话,我能监听2个,接到一个电话之后,后面还能有1个人给我打电话,但是后面这1个人都要排队等着,
等着我第一个电话挂掉,再来第3个的时候,第3个人的手机会报错.
这里目前只支持一对一的关系,一个服务端对应一个客户端.
'''
server.listen(2)
# 等着别人给我打电话,打来电话的时候,我就拿到了和对方的这个连线通道conn和对方的电话号码addr
conn, addr = server.accept() # 阻塞住,一直等到有人连接我,连接之后得到一个元祖,里面是连线通道conn和对方的地址(ip+端口)
print('conn', conn)
print('addr', addr)
while True:
from_client_msg = conn.recv(1024) # 服务端必须通过两者之间的连接通道来收消息,接收到的数据消息是bytes类型
from_client_msg = from_client_msg.decode('utf-8') # 将接收到的数据消息进行解码
print("来自客户端的消息:", from_client_msg)
if from_client_msg == 'bye':
break
server_input = input('>>>>:')
conn.send(server_input.encode('utf-8')) # 服务端给客户端发送一个bytes类型的消息
if server_input == 'bye':
break
conn.close() # 挂电话
server.close() # 关手机
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
# coding=utf-8
import socket
client = socket.socket() # 创建一个socket对象
server_ip_port = ('127.0.0.1', 8001) # 服务器端的ip+端口,元组类型
client.connect(server_ip_port) # 客户端连接服务端
while True:
client_input = input('>>>>:')
client.send(client_input.encode('utf-8')) # 给服务端发送bytes类型的消息
if client_input == 'bye':
break
from_server_msg = client.recv(1024) # 接收最大为1024B(1K)的消息,
from_server_msg = from_server_msg.decode('utf-8')
print('来自服务端的消息:', from_server_msg) # 打印解码后的消息
if from_server_msg == 'bye':
break
client.close() # 客户端挂电话
注意:先运行server,然后再运行client.
两个小练习:
1.
server端:接收时间戳时间,转换成格式化时间
client端:每隔10秒中把时间戳发给server端,time.time()
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
# coding=utf-8
import socket
import time
server = socket.socket() # 创建一个socket对象,创建一部电话
ip_port = ('127.0.0.1', 8002)
server.bind(ip_port) # 插上电话卡
server.listen(2) # 监听
conn, addr = server.accept() # 等待接听电话,conn是连接通道,addr是客户端ip+port
while 1:
from_client_msg = conn.recv(1024) # 接收时间戳时间
from_client_msg = time.strftime("%Y-%m-%d %X", time.localtime(int(from_client_msg.decode("utf-8")))) # 转换成格式化时间
print("来自客户端的消息:", from_client_msg)
conn.send("时间戳我已收到".encode("utf-8"))
conn.close() # 关闭连接,挂电话
server.close() # 关机
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
# coding:utf-8
import socket
import time
client = socket.socket() # 创建一个socket对象
ip_port = ('127.0.0.1', 8002)
client.connect(ip_port) # 连接服务端,打电话给服务端
while 1:
time.sleep(10)
client.send(str(int(time.time())).encode("utf-8")) # 发送时间戳
from_server_msg = client.recv(1024) # 接收服务端发来的消息
print("来自服务端的消息:", from_server_msg.decode("utf-8"))
client.close() # 关闭连接,挂电话
2. 一直对话的程序
server收一个发一个
client发一个收一个
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
# coding:utf-8
import socket
server = socket.socket()
ip_port = ("127.0.0.1", 8003)
server.bind(ip_port)
server.listen(2)
conn, addr = server.accept()
while 1:
from_client_msg = conn.recv(1024)
print("来自客户端的消息:", from_client_msg.decode("utf-8"))
if from_client_msg.decode("utf-8").lower() == "bye":
break
send_input = input(">>>: ").strip()
conn.send(send_input.encode("utf-8"))
if send_input.lower() == "bye":
break
conn.close()
server.close()
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
# coding:utf-8
import socket
client = socket.socket()
ip_port = ("127.0.0.1", 8003)
client.connect(ip_port)
while 1:
send_input = input(">>>: ").strip()
client.send(send_input.encode("utf-8"))
if send_input.lower() == "bye":
break
from_server_msg = client.recv(1024)
print("来自服务端的消息:", from_server_msg.decode("utf-8"))
if from_server_msg.decode("utf-8").lower() == "bye":
break
client.close()
网络编程 https://www.cnblogs.com/clschao/articles/9593164.html
并发编程的博客目录 https://www.cnblogs.com/clschao/articles/10065920.html
mysql数据库的学习目录 https://www.cnblogs.com/clschao/articles/10065275.html
前端的博客目录 https://www.cnblogs.com/clschao/articles/10073124.html
django的学习目录 https://www.cnblogs.com/clschao/articles/10526431.html