python高级 -- 网络编程

网络编程就是如何在程序中实现两台计算机的通信

1.1 UDP编程

TCP是建立可靠连接,并且通信双方都可以以流的形式发送数据。相对TCP,UDP则是面向无连接的协议。

使用UDP协议时,不需要建立连接,只需要知道对方的IP地址和端口号,就可以直接发数据包。但是,能不能到达就不知 道了。

虽然用UDP传输数据不可靠,但它的优点是和TCP比,速度快,对于不要求可靠到达的数据,就可以使用UDP协议。

适用情况

UDP是面向消息的协议,通信时不需要建立连接,数据的传输当然是不可靠 的,UDP一般用于多点通信和实时的数据业务,例如

语音广播、视频、QQ、TFTP(简单文件传送)、SNMP(简单网络管理协议)、RIP(路由信息协议,如报告股票市场, 航空信

息)

UDP通信流程

 

客户端实现:

from socket import *
sc = socket(AF_INET, SOCK_DGRAM)
addr = ('127.0.0.1', 8989)
while True:
    datastr = input("输入发送内容")
    if datastr.__eq__("exit"):
        break
    dataencode = datastr.encode(encoding="utf-8")
    sc.sendto(dataencode, addr)
    receivecode, saddr = sc.recvfrom(1024)
    receivedata = receivecode.decode(encoding="utf-8")
    print(receivedata, saddr)
sc.close()
print("finish")

服务端实现:

from socket import *
ss = socket(AF_INET, SOCK_DGRAM)
saddr = ('127.0.0.1', 8989)
ss.bind(saddr)
while True:
    dataencode, caddr = ss.recvfrom(1024)
    datastr = dataencode.decode(encoding="utf-8")
    print(datastr)
    str = input("输入发送内容")
    if str.__eq__("exit"):
        break
    strcode = str.encode(encoding="utf-8")
    ss.sendto(strcode, caddr)
ss.close()
print("finish")

1.2 TCP编程

TCP通信流程

 

TCP三次握手:
 

TCP三次握手

张三首先向李四招手(syn),李四看到张三向自己招手后,向对方点了点头挤出了一个微笑(ack)。张三看到李四微笑后确认 了李

四成功辨认出了自己(进入estalished状态)。 但是李四还有点狐疑,向四周看了一看,有没有可能张三是在看别人呢,他也需要

确认一下。 所以李四也向张三招了招手(syn),张三看到李四向自己招手后知道对方是在寻求自己的确认,于是也点了点头挤出

了微笑 (ack),李四看到对方的微笑后确认了张三就是在向自己打招呼(进入established状态)。 我们看到这个过程中一共是四个

动作,张三招手--李四点头微笑--李四招手--张三点头微笑。 其中李四连续进行了2个动作,先是点头微笑(回复对方),然后再次

招手(寻求确认),实际上可以将这两个动作合一,招手 的同时点头和微笑(syn+ack)。 于是四个动作就简化成了三个动作,张三

招手--李四点头微笑并招手--张三点头微笑。这就是三次握手的本质,中间的一次 动作是两个动作的合并。

TCP四次挥手:
 

TCP四次挥手

 

服务端实现:

from socket import *
ss = socket(AF_INET, SOCK_STREAM)
saddr = ('127.0.0.1', 8989)
ss.bind(saddr)
ss.listen(100)
print("服务启动了")
while True:
    sc, caddr = ss.accept()
    receivebytes = sc.recv(1024)
    receivedata = receivebytes.decode("utf-8")
    print("收到:%s" % receivedata)
    sendenbytes = receivebytes
    sc.send(sendenbytes)
    # sc.close()
ss.close()

客户端实现:

from socket import *
sc = socket(AF_INET, SOCK_STREAM)
saddr = ('127.0.0.1', 8989)
sc.connect(saddr)
while True:
    senddata = input("输入要发送的数据")
    if senddata.__eq__("exit"):
        sc.close()
        break
    sendbytes = senddata.encode("utf-8")
    sc.send(sendbytes)
    receivebytes = sc.recv(1024)
    receivedata = receivebytes.decode("utf-8")
    print(receivedata)

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值