python传输层网络编程

1.socket

1.1 socket的由来

socket是一种计算机网络数据结构,中文译名:套接字
一般将程序中的套接字分为两种

面向文件的套接字:通过文件进行数据交互
面向网络的套接字:通过网络进行数据交互

1.2 python中的套接字

在网络套接字交互过程中,出现了两种类型的套接字模型

面向连接的套接字模型:TCP
面向无连接的套接字模型:UDP

1.3 基本语法结构
socket.socket(socket_family, socket_type, protocal=0)
socket_family  # socket地址家族,AF_UNIX/AF_LOCAL 或者AF_INET
socket_type  # socket连接类型
protocal  # 传输协议,一般不用设置
# 创建TCP协议的套接字socket对象
tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 创建UDP协议的套接字socket对象
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
1.4 socket套接字常用操作
s.bind()  # 绑定(主机名称,端口)到一个套接字上
s.listen()  # 设置并启动TCP监听
s.accept()  # 等待客户端连接
s.connect()  # 连接指定服务器
s.recv()  # 接收TCP消息
s.send()  # 发送TCP消息
s.recvfrom()  # 接收UDP消息
s.sendto()  # 发送UDP消息
s.close()  # 关闭套接字对象

2. TCP 编程

2.1 什么是TCP

TCP:Transmission Control Protocal 传输控制协议
是一种面向连接的、可靠的、基于字节流的传输层通信协议

2.2 TCP模型中的三次握手四次挥手
三次握手建立连接

A->B: 发送一个寻址请求码seq=100; B->A:返回一个应答 ack=101
A->B: 发送一个确认请求码seq=101,确认连接; B->A:返回一个应答 ack=300
A->B: 发送一个连接请求码seq=300; B->A:返回一个应答 ack=80
A和B之间开始进行数据交互

四次挥手断开连接

A->B: 发送一个数据验证请求码seq=100; B->A:返回一个应答 ack=101
A->B: 发送一个传输结束标记seq=101; B->A:返回一个应答 ack=200
A->B: 发送一个确认结束标记seq=200; B->A:返回一个应答 ack=300
A->B: 发送一个连接断开标记seq=300; B->A:返回断开连接应答 ack=400

3.TCP 服务端开发

import socket

# 定义服务器信息
print("初始化服务器信息")
HOST = ''
PORT = 8888
ADDRESS = (HOST, PORT)
BUFFER = 1024

# 创建TCP服务端套接字
print("创建服务端套接字")
tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 绑定主机
print("初始化服务器")
tcp_socket.bind(ADDRESS)

# 启动监听
print("开始监听")
tcp_socket.listen(128)

# 等待连接
while True:
    # 等待客户端的接入
    print("等待客户端接入.......")
    client_socket, client_address = tcp_socket.accept()
    print("客户端{}接入成功".format(client_address))

    # 发送欢迎消息
    client_socket.send("欢迎访问服务器".encode("utf-8"))

    # 收发消息
    while True:
        # 接受消息
        msg = client_socket.recv(BUFFER)
        print("client{}:{}".format(client_address, msg.decode("utf-8")))

        if msg == b'bye':
            print("客户端即将推出")
            client_socket.close()
            break

        # 发送消息
        info = input("server enter message:")
        client_socket.send(info.encode("utf-8"))

4.TCP客户端开发

import socket

print("定义要连接的目标服务器信息")
HOST = '192.168.11.202'
PORT = 8888
ADDRESS = (HOST, PORT)
BUFFER = 1024

print("创建TCP客户端套接字")
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

print("连接目标主机")
client_socket.connect(ADDRESS)

print("连接成功,收发消息>>>>>>")
while True:
    # 接受服务器欢迎消息
    msg = client_socket.recv(BUFFER)
    print("server: {}".format(msg.decode("utf-8")))

    if info == "bye":
        print("准备退出")
        client_socket.close()
        break
    # 发送消息
    info = input("client enter message: ")
    client_socket.send(info.encode("utf-8"))

转载于:https://www.cnblogs.com/chenliang0309/p/9763263.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值