Python进阶---网络编程

本文深入介绍了网络编程的基础概念,包括IP地址、端口、TCP协议的三次握手和数据通讯机制。特别地,详细阐述了TCP服务端的业务流程,包括socket的创建、绑定、监听、接受连接、数据收发及关闭套接字的过程。同时,给出了客户端和服务端的数据传输步骤,以及如何判断客户端断开连接。最后,通过示例代码展示了如何使用Python的socket模块实现TCP服务器。
摘要由CSDN通过智能技术生成

网络编程

一、网络编程

二、端口

三、TCP协议

四、socekt(本地套接字)

五、业务流程

六、总结


一、网络编程

ip地址: 网络中标识唯一一台网络设备的编号

在同一个局域网中的网段是相同的

  • 产看电脑的ip地址

    • mac/linux : ifconfig

    • win: ipconfig

  • ip地址:

    • ipv4 : 已经枯竭了

    • ipv6 : 够用的

  • ping 命令:

    • 检测网络是否畅通

    • ping localhost 等价于 ping 127.0.0.1 检测本机网络环境是否畅通

二、端口

端口: 网络数据毕竟的地方

端口号: 对端口的编号

在网络中通过ip地址可以找到一个网络设备, 通过端口号可以找到这台网络设备中的一个网络程序

  • 端口号的分类

    • 知名端口

      • 0~1023

    • 动态端口

      • 1024~65535

    • 测试端口

      • 8080

三、TCP协议

网络中通过tcp协议进行建立链接需要

  1. 建立链接

    1. 三次握手的机制(链接建立成功)

 

  1. 数据通讯

    1. 发送发送应答机制(发送一个数据后一定会接收到一个应答 这才是一个完整的数据通讯)

    2. 超时重传(发送一个数据以后, 在一定的时间内没有接受到回答, 重写发送一个数据)

    3. 错误校验,发送数据的时候,会在数据的开头标明数据的信息(数据长度10)

    4. 流量控制

四、socekt(本地套接字)

socekt: 进程间进行数据通讯的一个工具(在网络中的进程间进行通讯)

tcp服务端的业务流程:

  1. socket() : 创建一个服务端的电话 负责接受客户端的请求

  2. bind() : 绑定一个ip地址和端口号 方便客户进行请求

  3. listen() : 把socket这个电话从可以打电话也可以接电话 变成一个只可以接电话的电话(被动套接字socket)

  4. accept() : 等待接受链接的到来,阻塞处理(类似于input)

  5. recv() : 接受客户的数据

  6. send() : 发送数据给客户

  7. close() : 关闭套接字

五、业务流程

整个业务两个部分

  • 客户端

  • 服务端

客户端和服务端进行数据的传输

  • 建立连接

    • 三次握手(打电话打通)

  • 数据的交互

    • send(data)

    • recv(data)

  • 连接断开

    • 四次挥手

    • server 和 client进行断开过程

六、总结

# 导入socket模块
import socket

# 1. 创建电话
# 参数1: ipv4地址
# 参数2: tcp协议, 流式协议
tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 2. 绑定电话号码
# 参数: 元组
# 元组中的第一元素: 字符串类型的数据 ip地址
# 元组中的第二元素: 整数类型 端口号
tcp_socket.bind(("127.0.0.1", 8080))
# 3. 改成只能接电话
# 参数: 同一时刻最大可以接受的链接请求数量
tcp_socket.listen(128)

while True:
    # 4. 等待客户的到来
    # 阻塞等待客户的链接请求的到来
    # client_socket  ==>  和客户端通讯的电话
    # client_addr   ==>   客户端的ip地址和端口号
    client_socket, client_addr = tcp_socket.accept()
    print(f"客户端{client_addr}上线了")
		
    
    # 让我们的小弟(client_socket) 可以一直跟一个客户进行数据的交互
    while True:
        recv_data = client_socket.recv(1024)
        print("接受到的客户端数据:", recv_data.decode("gbk"))

        if len(recv_data) == 0:
            print(f'{client_addr}客户端断开连接')
            client_socket.close()
            break
            
        data = input("请输入数据:")
        client_socket.send(data.encode("utf8"))

# 7.挂电话
tcp_socket.close()

解析:

01-创建电话-socket()

  • tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

  • 参数1: socket.AF_INET ==> ipv4地址

  • 参数2: socket.SOCK_STREAM ==> tcp协议

02-绑定地址信息-bind()

  • tcp_socket.bind(("127.0.0.1", 8080))

  • 参数(元组类型的):

    • 元组的第一元素 : 字符串类型的数据 ip地址

    • 元组中的第二元素: 整数类型 端口号

03-设置监听listen-让tcp_socket变成一个只会接受数据的socket

  • tcp_socket.listen(128)

04-设置了循环while True

  • accept() 让我们的大哥(tcp_socket) 可以一直循环接受 用户的连接请求

    • client_socket, client_addr = tcp_socket.accept() print(f"客户端{client_addr}上线了")

  • recv()~send() 让我们的小弟(client_socket) 可以一直跟一个客户进行数据的交互

    • while True: recv_data = client_socket.recv(1024) print("接受到的客户端数据:", recv_data.decode("gbk")) if len(recv_data) == 0: print(f'{client_addr}客户端断开连接') client_socket.close() break data = input("请输入数据:") client_socket.send(data.encode("utf8"))

  • 如何判断客户端是否断开了链接:

    • 如果接受的数据为空 即数据的长度为0 那么证明客户端断开了链接

<end>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

木易巷

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值