Python网络编程

33次阅读
没有评论

共计 1171 个字符,预计需要花费 3 分钟才能阅读完成。

Socket

简称套接字,是进程之间通信的一个工具,进程之间想要进行网络通信需要 Socket。

Socket 负责进程之间的网络数据传输,好比数据的搬运工。

服务端开发

import socket
import threading

def handle_client(conn, address):
    """ 用于处理客户端连接请求 """
    print(f" 客户端地址 {address}")
    while True:
        # 接收客户端信息,recv 接收参数是缓冲区大小,返回值是 bytes 对象
        recv_data = conn.recv(1024).decode("UTF-8")
        print(f" 客户端发来的消息:{recv_data}")
        msg = input(" 请输入回复的消息:")
        if msg == "exit":
            break
        conn.send(msg.encode("UTF-8"))
    conn.close()

if __name__ == "__main__":
    socket_server = socket.socket()
    socket_server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)  # 设置端口复用
    socket_server.bind(("localhost", 8888))  # 绑定 IP 和端口
    socket_server.listen(128)  # 监听端口,最大连接数量 128
    print(" 等待客户端连接...")

    while True:
        conn, address = socket_server.accept()  # 等待客户端连接,accept 是个阻塞方法
        t = threading.Thread(target=handle_client, args=(conn, address))
        t.start()

    socket_server.close()

客户端开发

import socket

# 创建 socket 对象
socket_client = socket.socket()
# 连接到服务端
socket_client.connect(("localhost", 8888))

while True:
    # 发送消息
    msg = input(" 请输入要发给服务端的消息:")
    if msg == "exit":
        break
    socket_client.send(msg.encode("UTF-8"))
    # 接收服务端消息
    recv_data = socket_client.recv(1024).decode("UTF-8")
    print(f" 服务端回复的消息:{recv_data}")

# 关闭连接
socket_client.close()

不管是 recv 还是 send 都不是直接接收到对方的数据和发送数据到对方,发送数据会写入到发送缓冲区,接收数据是从接收缓冲区来读取,发送数据和接收数据最终是由操作系统控制网卡来完成的。

正文完
post-qrcode
 0
三毛
版权声明:本站原创文章,由 三毛 于2023-12-21发表,共计1171字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)