套接字:应用进程与端到端传输协议(TCP或UDP)之间的门户
TCP服务:从一个进程向另一个进程可靠地传输字节流
TCP会保证报文不丢失,乱序。但是不能保证不粘包。
UDP都不可以保证,主打的就是快。
当使用UDP时,必须先将目的地址附在该分组之上。在该分组传过发送方的套接字之后,因特网将使用该目的地址通过因特网为该分组选路到接收进程的套接字。
当生成一个套接字时,就为它分配一个称为端口的标识符
# 客户端代码
from socket import *
serverName = "127.0.0.1"
serverPort = 5000
# 生成一个套接字
client = socket(AF_INET, SOCK_DGRAM)
msg = input("Input lowercase: ")
# 向指定ip发送报文
client.sendto(msg.encode(), (serverName, serverPort))
# 接受并打印报文
msg, server = client.recvfrom(2048)
print(msg.decode())
client.close()
# 服务器代码
from socket import *
port = 5000
# 生成一个套接字
serverSocket = socket(AF_INET, SOCK_DGRAM)
# 绑定到端口
serverSocket.bind(('', port))
print("server is ready to receive")
while True:
# 接受报文
msg, clientAdd = serverSocket.recvfrom(2048)
msg = msg.decode().upper()
print(f"from: {clientAdd}, msg: {msg}")
# 发送报文
serverSocket.sendto(msg.encode(), clientAdd)
TCP是一个面向连接的协议。这意味着在客户和服务器能够开始互相发送数据之前,它们先要握手和创建一个TCP连接。
TCP和UDP的服务器程序不同,UDP只需要不断的接受报文,回答报文。UDP更适合一下快速、无状态、不要求稳定的应用。
TCP绑定端口的套接字,俗称“欢迎之门”又叫Welcome Socket
当主机与服务器进行三次握手成功,“可能是服务器会告诉你要和哪个端口建立connect socket”,然后在通过三次握手重新建立connect socket。
TCP客户端代码