套接字 - UDP - TCP 的认识

HTTP协议图解
TCP与UDP的简单图解

1.套接字 - UDP - TCP

基于文件(AF_UNIX)和面向网络(AF_INET)
Python只支持AF_UNIX、AF_NETLINK、AF_TIPC和AF_INET

套接字:【是计算机网络的数据结构,它体现了”通信端点“的概念】
	优点:速度快,只需要知道对方的IP地址和端口号,就可以直接发数据包。
	缺点:传输数据不可靠,能不能到达就不知道了。
	1.面向对象的套接字连接:【虚拟电路或流套接字,流】
		同行之前必须建立一个连接,
		实现这种类型的连接主要协议是TCP【传输控制协议,必须使用SOCK_STREAM套接字类型】
	2.无连接的套接字连接:【数据报类型的套接字,数据报】
		实现这种类型的连接主要协议是UPD【用户数据协议,必须使用SOCK_DGRAM套接字类型】
	
TCP的传输数据方式提供序列化的、可靠的和不重复的数据交付,而没有记录边界。这基本上意味着每条消息可以拆分成多个片段,并且每一条消息片段都能确保能够到达目的地,然后将它们按顺序组合在一起,最后将完整的消息传递给正在等待的应用程序。
UDP的传输方式,虽不要通信前建立连接,,但是在数据传输过程中,并无法保证他的顺序性、可靠性或重复性。However,数据报确实保存了记录边界,所以这意味着消息是以整体发送的。它的优势在于,不需要对虚拟电路那样的维护,所以节省很大一笔开销,成本即更加“低廉”。
————————————————
原文链接:https://blog.csdn.net/qq_43560707/article/details/99709621

2.UDP实例

UDP Server

# coding=utf-8
from socket import *

s = socket(type = SOCK_DGRAM)
s.bind(("127.0.0.1", 12345))
data, addr = s.recvfrom(1024)
print(data, addr)
s.close( )
# 输出:
# b'Hello Python' ('127.0.0.1', 49975)

UDP Client

# coding=utf-8
from socket import *

c = socket(type = SOCK_DGRAM)
ip_port = ("127.0.0.1", 12345)
c.sendto("Hello Python".encode("utf-8"), ip_port)
c.close( )

3.TCP简单认识

1.TCP协议则是建立在IP协议之上的。TCP协议负责在两台计算机之间建立可靠连接,保证数据包按顺序到达。

2.TCP协议会通过握手建立连接,然后,对每个IP包编号,确保对方按顺序收到,如果包丢掉了,就自动重发。

3.TCP协议的三次握手
	①飞行员:02 02 听到请回答?
	②基地:01 01 收到收到 请说(此时二者同步在线)
	③通信。(必须要连接)
	TCP在通信需要2个角色:服务器端,客户端,两者可以互相传递数据

4.服务器端的实现5个步骤及使用使用的方法:
	① 使用socket类创建对象
	②绑定地址 bind() (用来定义服务器端的地址)
	③监听客户端 listen() (第一次握手)
	④被动接收客户端连接 accept() (第二次握手)
	⑤发送或接收数据 send(),recv()(第三次握手)
————————————————
原文链接:https://blog.csdn.net/weixin_38335127/article/details/100717440

4.TCP实例

TCP Server

# coding=utf-8
from socket import *

s = socket( )
s.bind((gethostname( ), 12345))
s.listen(5)
while True:
    c, addr = s.accept( )
    print(f"连接地址:{addr}")
    c.send("server Hello".encode("utf-8"))
    data = c.recv(1024)
    print(data)
    c.close( )
# 输出:
# 连接地址:('10.16.5.250', 9288)
# b'666'

TCP Client

# coding=utf-8
from socket import *

s = socket(AF_INET, SOCK_STREAM)
s.connect((gethostname( ), 12345))
data = s.recv(1024)
print(data)
s.send(b"666")
s.close( )
# 输出:
# b'server Hello'

5.图解

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值