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'