1、tcp和udp的关系
tcp/ip是一个协议组,它可以分为四个部分,分别是:链路层、网络层、传输层、应用层
tcp和udp同属于tcp/ip的传输层
tcp是基于连接的协议,也就是说,在正式发送数据前,必须简历可靠的连接。tcp建立连接时需要进行三次握手,关闭连接时需要进行四次挥手,这就好像是在打电话一样。
udp是面向非连接的,它不要要和对方建立连接,而是直接把数据包发送过去,他不需要进行三次握手和四次挥手,这就好像写信一样,相对不可靠。
2、tcp和udp的使用场合
udp使用场合
对效率要求相对高,对准确性要求相对低的场景。udp一般用于即时通信、在线视频、网络语音电话
tcp使用场合
对效率要求相对低,对准确性要求相对高的场景,或者是要求有连接的场景。tcp一般用于文件传输协议(ftp、http)、发送或接收邮件(pop、 smtp)、远程登陆(telnet、ssh)
3、udp的简单实现
#导入socket套接字
importsocket#创建udp套接字
udp_socket =socket.socket(socket.AF_INET,socket.SOCK_DGRAM)#绑定端口和ip
udp_socket.bind(('', 8000))#设置允许广播
udp_socket.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)#获取用户需要发送的内容
mess = input("enter the information you want to send:")#定义目标地址
dest_addr = ("255.255.255.255", 8000)#发送输入的数据到指定的ip,255.255.255.255表示广播
udp_socket.sendto(mess.encode(), dest_addr)#接收1024个字节的数据
recv_data, recv_addr = udp_socket.recvfrom(1024)#打印接收到的数据,因为接收到的数据来自windows,所以需要使用gbk解码
print(recv_data.decode("gbk"))#关闭套接字
udp_socket.close()
4、tcp的简单实现
#服务器端#导入socket套接字
importsocket#创建tcp套接字
server_socket =socket.socket(socket.AF_INET, socket.SOCK_STREAM)#绑定本地ip和端口
server_socket.bind(("",8080))#设置监听状态,1表示统一时刻只能有一个链接
server_socket.listen(1)#等待客户端链接
client_socket, client_addr =server_socket.accept()#设置返回的信息,如果这样返回的话,使用浏览器访问将出现hellworld,因为http协议也是基于tcp的
mess = "HTTP/1.1 200 OK\r\n\r\nhello world"
#给客户端套接字发送数据
client_socket.send(mess.encode())#接受1024个字节的数据
recv_data = client_socket.recv(1024)#打印数据并解编码
print(recv_data.decode("gbk"))#关闭客户端套接字
client_socket.close()#关闭服务器套接字
server_socket.close()
#tcp客户端#导入socket套接字
importsocket#创建tcp套接子
client_socket =socket.socket(socket.AF_INET, socket.SOCK_STREAM)#建立链接
client_socket.connect(("192.168.217.1", 8080))#获取需要发送的数据
send_data = input("enter you need to send:")#发送数据
client_socket.send((send_data.encode()))#接收1024个字节的数据
recv_data = client_socket.recv(1024)#打印数据,因为是windows,所以需要gbk解码
print(recv_data.decode("gbk"))#关闭套接字
client_socket.close()