黛芝美,蚌背鱼,郑娅琳
tcp协议是一种流式协议,udp协议是一种数据包协议。
tcp和udp是osi模型中传输层的协议。tcp提供可靠的通信传输,而udp则常被用于让广播和细节控制交给应用的通信传输。
tcp和udp区别总结:
tcp | udp | |
---|---|---|
是否连接 | 面向连接 | 无连接 |
传输可靠性 | 可靠 | 不可靠 |
应用场合 | 少量数据 | 大量数据 |
传输速度 | 慢 | 快 |
区别补充说明:
1、tcp提供可靠的服务,通过tcp连接传送的数据,无差错,不丢失,不重复,且按序到达;udp尽最大努力交付,不保证可靠交付
2、tcp面向字节流,实际上是tcp把数据看成一连串无结构的字节流;udp是面向报文的,udp没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如ip电话,实时视频会议等)
3、每一条tcp连接只能是点到点的;udp支持一对一,一对多,多对一和多对多的交互通信
4、tcp首部开销20字节;udp的首部开销小,只有8个字
python编程步骤不同
tcp编程的服务器端一般步骤是:
import socket # 步骤二的参数 from socket import sol_socket from socket import so_reuseaddr # tcp服务端 # 1、创建socket对象,通过socket()获取 server_socket = socket.socket() # 2、设置socket属性,导入参数,通过setsockopt() #该步骤可选 server_socket.setsockopt(sol_socket, so_reuseaddr, 1) # 3、绑定ip地址、端口信息到socket对象中,通过bind(),参数是一个元组 server_socket.bind(('127.0.0.1', 9527)) # 4、开启半连接池,使用listen(),参数是整型,表示接收可等待的客户端 server_socket.listen(5) while true: # 5、阻塞状态,自动接收客户端的连接,通过函数accept(),返回连接对象和客户端地址 conn, client = server_socket.accept() while true: try: # 6、收发数据,通过recv() 接收数据,默认参数是1024,表示每次接收数据最大字节数为1024; re_data = conn.recv(1024).decode('utf-8') # 获取到空数据后,重新收发数据 if len(re_data) == 0: continue # 获取到q后,关闭连接 if re_data == 'q': break print(re_data) # send()发送数据,数据必须是bytes类型 msg = input("from server……").strip().encode('utf-8') conn.send(msg) except connectionreseterror as e: print(e) # 7、关闭连接 conn.close() # 8、关闭连接池 server_socket.close()
tcp编程的客户端一般步骤是:
import socket # 步骤二的参数 from socket import sol_socket from socket import so_reuseaddr # tcp客户端 # 1、创建socket对象,通过socket()获取 client_socket = socket.socket() # 2、设置socket属性,导入参数,通过setsockopt() #该步骤可选 client_socket.setsockopt(sol_socket, so_reuseaddr, 1) # 3、设置要连接的服务端的ip地址和端口属性并连接到服务端,通过connect() # 参数为元组,元组中第一个元素是ip地址,第二个元素是端口号 client_socket.connect(('127.0.0.1', 9527)) while true: # 4、通过send()发送数据,数据必须是bytes类型 msg = input('from client……').strip().encode('utf-8') client_socket.send(msg) # 5、通过recv() 接收数据,默认参数是1024,表示每次接收数据最大字节数为1024; re_data = client_socket.recv(1024).decode('utf-8') if re_data == 'q': break print(re_data) # 6、关闭网络连接 client_socket.close()
udp编程的服务端一般步骤是:
import socket # 步骤二的参数 from socket import sol_socket from socket import so_reuseaddr # udp服务端 # 1、获取socket对象,type=-1或者1 表示socket的类型默认为sock_stream ---→ tcp # type = 2表示socket的类型为sock_dgram ----→ udp server = socket.socket(type=2) # 2、设置socket属性,导入参数,通过setsockopt() #该步骤可选 server.setsockopt(sol_socket, so_reuseaddr, 1) # 3、绑定服务器地址和端口 server.bind(('127.0.0.1', 9527)) # 4、循环收发数据 while true: # 自动阻塞,等待客户端访问,接收客户端发送数据,接收使用recvfrom() # 收到的记录是一个元组,分别是数据和地址 data, addr = server.recvfrom(1024) re_data = data.decode('utf-8') if len(re_data) == 0: continue if re_data == 'q': break # 打印收到的结果 print(f'client_addr:{addr},re_data:{re_data}') # 输入发送给client的记录 msg = input('from server to client:').strip().encode('utf-8') # 发送消息使用sendto,参数是二进制数据和地址 server.sendto(msg, addr) # 5、关闭网络连接 server.close()
udp编程的客户端一般步骤是:
import socket # 步骤二的参数 from socket import sol_socket from socket import so_reuseaddr # udp服务端 # 1、获取socket对象,type=-1或者1 表示socket的类型默认为sock_stream ---→ tcp # type = 2表示socket的类型为sock_dgram ----→ udp client = socket.socket(type=2) # 2、设置socket属性,导入参数,通过setsockopt() #该步骤可选 client.setsockopt(sol_socket, so_reuseaddr, 1) server_add = '127.0.0.1' # 服务端地址 # 3、循环收发数据 while true: # 发送数据使用sendto(),参数是二进制数据和地址 msg = input('from_udp_client……').strip().encode('utf-8') client.sendto(msg, (server_add, 9527)) # 接收数据使用recvfrom() re_data, addr = client.recvfrom(1024) if re_data.decode('utf-8') == 'q': break print(re_data.decode('utf-8')) # 4、关闭连接 client.close()
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
新手学习Python2和Python3中print不同的用法
Python基于os.environ从windows获取环境变量
网友评论