TCP和UDP协议
- TCP基于连接发送数据,UDP无需连接就可以发送数据
- TCP安全,会重传数据包,UDP不安全,发送完就不再理会
- TCP发送速度慢,UDP发送速度快
- TCP一般用于发送聊天文字,UDP一般用于发送音视频
服务端TCP和UDP
# tcp服务端
import socket
# socket.AF_INET表示地址格式是ipv4,socket.SOCK_STREAM表示通讯协议是TCP
tcpServerSocket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
# 设置局域网内服务地址为10.20.154.92,端口号为6666
tcpServerSocket.bind(("10.20.154.92",6666))
tcpServerSocket.listen(5)
client,add=tcpServerSocket.accept()
while True:
# 设置消息接受最大长度为1024
msg = client.recv(1024)
print("客户端发送消息为:",msg.decode())
# client.send可以将消息传递回客户端
client.send("服务器收到了你发来的消息".encode())
tcpServerSocket.close()
# udp服务端
import socket
ssk = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
ssk.bind(("10.20.154.92",6666))
while True:
# 接受:返回结果为数据和地址
msg,address = ssk.recvfrom(1024)
print(("客户端:%s说:%s")%(address,msg.decode()))
# 参数是,(发送给客户端的数据,客户端地址)
msg1 = input("服务器说:")
# 此处是指给发送消息过来的客户端回传消息,所以加上参数address
ssk.sendto(msg1.encode(),address)
ssk.close()
客户端UDP和TCP
# tcp客户端
import socket
clientSockte = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
# 客户端主动连接服务器
clientSockte.connect(("10.20.154.92",6666))
print("客户端连接服务器..........")
while True:
msg = input("请输入你要说的话")
# 发送数据变成二进制传递过去
clientSockte.send(msg.encode())
# 接收服务器返回的数据,最大为1024
rec = clientSockte.recv(1024)
print("服务器返回:",rec.decode())
clientSockte.close()
# udp客户端
import socket
cls = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
while True:
# 发送
msg = input("客户端说:")
cls.sendto(msg.encode(),("10.20.154.92",6666))
msg2,address = cls.recvfrom(1024)
print("服务器说:",msg2.decode())
# 接受