博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

Python Socket编程

Posted on 2023-08-07 17:18  steve.z  阅读(17)  评论(0编辑  收藏  举报

Socket

客户端

#
#   py_client.py
#   py_learn
#
#   Created by Z. Steve on 2023/8/7 16:36.
#


import socket


def test_client():
    # 1. 创建 socket
    socket_client = socket.socket()
    # 2. 连接到服务器
    socket_client.connect(("localhost", 8091))
    # 3. 发送消息
    while True:
        send_msg = input("请输入你要发送的信息:")
        if send_msg == "exit":
            break
        socket_client.send(send_msg.encode("utf-8"))
        # 接收服务器返回的消息. recv() 方法会阻塞
        data = socket_client.recv(1024 * 2)
        print("服务器返回消息为: ", data.decode("utf-8"))

    # 5. 关闭连接
    socket_client.close()


if __name__ == "__main__":
    test_client()

服务端

  1. 一个服务端可以接收多个客户端请求
#
#   py_server.py
#   py_learn
#
#   Created by Z. Steve on 2023/8/7 16:16.
#

# 0. 导入 socket 模块
import socket


def test_socket():
    # 1. 创建 socket 对象
    socket_server = socket.socket()

    # 2. 绑定 IP 与 port
    ip_port = ("localhost", 8091)
    socket_server.bind(ip_port)

    # 3. 服务端开始监听端口, 参数 5 表示接受的连接数量
    socket_server.listen(5)

    # 4. 接收客户端连接, 获得连接对象; 返回值是一个元组
    # conn, 连接对象; addr, 客户端地址
    # accept() 方法会阻塞,等待客户端连接。
    conn, addr = socket_server.accept();

    print(f"客户端连接成功!客户端信息: {addr}")

    # 5. 接收客户端信息。通过 conn 来获取客户端信息
    # recv() 返回是一个字节数组, 通过 decode("utf-8") 将字节数组解码为字符串
    buf = 1024 * 2

    while True:
        data = conn.recv(buf).decode("utf-8")

        print(f"客户端发来的信息是:{data}")

        # 6. 向客户端发送信息
        msg = input("请输入向客户端发送的信息:")
        if msg == "exit":
            break
        conn.send(msg.encode("utf-8"))  # 字符串在发送前再进行 encode()

    # 7. 关闭连接
    conn.close()
    socket_server.close()


if __name__ == "__main__":
    test_socket()