Python语言提供了Socket套接字来实现网络通信。 Python的应用程序通常通过Socket"套接字"向网络发出请求或者应答网络请求,使主机间或者一台计算机上的进程间可以通讯。
TCP协议:
- TCP协议是在通信的两台设备之间建立连接通道,对传输的数据大小没有限制,但是因为建立了连接,相对可靠一些,但是速度会慢一些。TCP协议又称为三次握手–四次挥手协议,因为建立过程有三步(发送请求、获取反馈、建立连接)。通常情况下,我们的蓝牙通信、打电话都是使用的 TCP 协议。
UPD协议:
- UDP协议需要将数据打包,因为包有大小,所以对数据大小是有限制的,UDP是不用建立连接的,但不保证待接收方一定会接收到消息,所以不可靠。但是,因为不用建立连接,因此速度要快一些。通常情况下,我们发送短信都是使用的UDP 协议。
服务器端:
创建socket对象 使用bind()绑定主机号host和端口号port 使用listen()监听 使用accept()被动连接 使用send()/rece() 发送/接收数据
客户端:
创建socket对象 使用connect连接到服务器端 使用send()/recv() 发送/接收数据 关闭socket对象
**
服务器----->源代码
**
import socket
import time
tcpSocket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
host = "localhost"
port = 8888
Address = (host,port)
tcpSocket.bind(Address)
tcpSocket.listen(5)
while True:
print("-"*15,"服务器等待被连接","-"*15)
client_sock,client_add = tcpSocket.accept()
print("已连接到客户端,地址为:{0}".format(client_add))
try:
print("*"*20,"正在等待接收数据ing","*"*20)
while True:
Client_databack = client_sock.recv(1024)
print("接收到的客户端发送数据内容为:{0}".format(str(Client_databack,encoding="UTF-8")))
if Client_databack.upper() == "EXIT":
break
Now_time = time.strftime("%Y/%m/%d %H:%M:%S",time.localtime())
client_sock.send(bytes("时间 = {0},数据 = {1}".format(Now_time, str(Client_databack, encoding="UTF-8")), encoding="UTF-8"))
Server_data = input("My[服务器]=====>请输入发送到客户端的消息 :")
client_sock.send(Server_data.encode("UTF-8"))
Server_databack = client_sock.recv(1024).decode("UTF-8")
print("接收到的客户端发送数据内容为:%s" % Server_databack)
except Exception as abc:
print(abc)
finally:
client_sock.close()
客户端----->源代码
import socket
import time
clientSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = "localhost
port = 8888
Address = (host, port)
clientSocket.connect(Address)
if clientSocket is None:
print("Sorry,无法未连接到服务器.....NO")
else:
print("Successful,已经连接到服务器-----OK")
while True:
Client_data = input("My[客户端]=====>请输入发送到服务器的消息(exit/quit退出) :")
if Client_data.lower() =="exit" or Client_data.lower() =="quit":
clientSocket.send(bytes("EXIT".encode("UTF-8")))
print("我断开连接了...")
clientSocket.close()
break
clientSocket.send(bytes(Client_data.encode("UTF-8")))
Client_data_finally = clientSocket.recv(1024).decode("UTF-8")
print("【系统反馈】已收到数据内容为:%s"%Client_data_finally)
效果展示:
这两份源代码就可以进行简单的通讯,如有问题,请联系本人!
|