• 技术文章 >常见问题 >Python常见问题

    五分钟搞定Python网络编程实现TCP和UDP连接

    silencementsilencement2019-07-19 10:21:10原创2917

    Python网络编程实现TCP和UDP连接, 使用socket模块, 所有代码在python3下测试通过。

    实现TCP

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    #!/usr/bin/env python3

    # -*- coding: utf-8 -*-

    import socket

    # 创建一个socket:

    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

    # 建立连接:

    s.connect(('www.baidu.com', 80))

    # 发送数据:

    s.send(b'GET / HTTP/1.1\r\nHost: www.baidu.com\r\nConnection: close\r\n\r\n')

    # 接收数据:

    buffer = []

    while True:

        # 每次最多接收1k字节:

        d = s.recv(1024)

        if d:

            buffer.append(d)

        else:

            break

    data = b''.join(buffer)

    # 关闭连接:

    s.close()

    header, html = data.split(b'\r\n\r\n', 1)

    print(header.decode('utf-8'))

    # 把接收的数据写入文件:

    with open('sina.html', 'wb') as f:

        f.write(html)

    实现UDP连接

    服务端:

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    #!/usr/bin/env python3

    # -*- coding: utf-8 -*-

    import socket

    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

    # 绑定端口:

    s.bind(('127.0.0.1', 9999))

    print('Bind UDP on 9999...')

    while True:

        # 接收数据:

        data, addr = s.recvfrom(1024)

        print('Received from %s:%s.' % addr)

        reply = 'Hello, %s!' % data.decode('utf-8')

        s.sendto(reply.encode('utf-8'), addr)

    客户端

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    #!/usr/bin/env python3

    # -*- coding: utf-8 -*-

    import socket

    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

    for data in [b'Michael', b'Tracy', b'Sarah']:

        # 发送数据:

        s.sendto(data, ('127.0.0.1', 9999))

        # 接收数据:

        print(s.recv(1024).decode('utf-8'))

    s.close()

    专题推荐:tcp udp
    上一篇:如何判断Python对象是否为文件对象? 下一篇:解决python3 json数据包含中文的读写问题

    相关文章推荐

    • 深入理解python中的yield• 只需五点,搞定python作用域• Python中eval的用法及注意事项

    全部评论我要评论

    © 2021 Python学习网 苏ICP备2021003149号-1

  • 取消发布评论
  • 

    Python学习网