网络编程 python

#usr/bin/python
#-*-coding:utf-8-*-




"""服务器端""""




import socket

# 创建服务端
server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
# 绑定IP和端口
server.bind(("192.168.0.159",8888))
# 等待通讯
server.listen(5)
print("服务端已经启动,等待客户端连接.....")
# 接受通讯
connect1,address1 = server.accept()
while True:

    # 收到的信息
    msg = connect1.recv(1024)
    print("收到客户端发来的信息:{}".format(msg.decode("utf-8")))
    # 发送信息给客户端
    connect1.sendall(input('服务器:').encode("utf-8"))


# 通讯完毕,关闭连接
connect1.close()
# 关闭服务端
server.close()


""" 客户端"""


import socket

# 创建客户端
client1 = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
# 连接服务器
client1.connect(("192.168.0.159",8888))
print("客户端连接成功,请开始通讯,输入 n 结束通讯:")
while True:
    msg = input('客户端:')
    if msg == "n":
        break
    else:

        # 发送信息
        client1.send(msg.encode("utf-8"))

        # 接受服务器发送的信息
        msg = client1.recv(1024)
        print("服务端回复:{}".format(msg.decode("utf-8")))
# 通讯完毕,关闭连接
client1.close()



"""群聊服务器"""


import socket,threading

server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
server.bind(("192.168.0.159",8888))
server.listen(5)
print("服务端已经启动,等待客户端链接...")
message = ''
lock = threading.Lock()
cond = threading.Condition(lock=lock)


def get_msg(conn,addr):
    while True:
        msg = conn.recv(1024)
        global message
        cond.acquire()
        message = str(addr) + ">>>:" + msg.decode()
        print("收到的信息:{}".format(message))
        cond.notifyAll()
        cond.release()
def send_msg(conn,addr):
    while True:   # 不加锁则一直发送
        cond.acquire()
        cond.wait()
        cond.release()
        conn.sendall(message.encode('utf-8'))
        print('\t发送信息:{}'.format(message))

while True:
    conn, addr = server.accept()
    threading._start_new_thread(get_msg,(conn,addr))
    threading._start_new_thread(send_msg,(conn,addr))
"""群聊客户端"""


import socket,threading

client = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
client.connect(("192.168.0.159",8888))

def get_msg():
    while True:
        msg1 = client.recv(1024)
        print("\t收到信息:{}".format(msg1.decode()))

threading._start_new_thread(get_msg,())
while True:
    msg2 = input("请输入信息:")
    client.send(msg2.encode("utf-8"))

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQLAlchemy 是一个 SQL 工具包和对象关系映射(ORM)库,用于 Python 编程语言。它提供了一个高级的 SQL 工具和对象关系映射工具,允许开发者以 Python 类和对象的形式操作数据库,而无需编写大量的 SQL 语句。SQLAlchemy 建立在 DBAPI 之上,支持多种数据库后端,如 SQLite, MySQL, PostgreSQL 等。 SQLAlchemy 的核心功能: 对象关系映射(ORM): SQLAlchemy 允许开发者使用 Python 类来表示数据库表,使用类的实例表示表中的行。 开发者可以定义类之间的关系(如一对多、多对多),SQLAlchemy 会自动处理这些关系在数据库中的映射。 通过 ORM,开发者可以像操作 Python 对象一样操作数据库,这大大简化了数据库操作的复杂性。 表达式语言: SQLAlchemy 提供了一个丰富的 SQL 表达式语言,允许开发者以 Python 表达式的方式编写复杂的 SQL 查询。 表达式语言提供了对 SQL 语句的灵活控制,同时保持了代码的可读性和可维护性。 数据库引擎和连接池: SQLAlchemy 支持多种数据库后端,并且为每种后端提供了对应的数据库引擎。 它还提供了连接池管理功能,以优化数据库连接的创建、使用和释放。 会话管理: SQLAlchemy 使用会话(Session)来管理对象的持久化状态。 会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子函数。 这使得开发者可以在对象加载、修改、删除等操作时执行额外的逻辑。
SQLAlchemy 是一个 SQL 工具包和对象关系映射(ORM)库,用于 Python 编程语言。它提供了一个高级的 SQL 工具和对象关系映射工具,允许开发者以 Python 类和对象的形式操作数据库,而无需编写大量的 SQL 语句。SQLAlchemy 建立在 DBAPI 之上,支持多种数据库后端,如 SQLite, MySQL, PostgreSQL 等。 SQLAlchemy 的核心功能: 对象关系映射(ORM): SQLAlchemy 允许开发者使用 Python 类来表示数据库表,使用类的实例表示表中的行。 开发者可以定义类之间的关系(如一对多、多对多),SQLAlchemy 会自动处理这些关系在数据库中的映射。 通过 ORM,开发者可以像操作 Python 对象一样操作数据库,这大大简化了数据库操作的复杂性。 表达式语言: SQLAlchemy 提供了一个丰富的 SQL 表达式语言,允许开发者以 Python 表达式的方式编写复杂的 SQL 查询。 表达式语言提供了对 SQL 语句的灵活控制,同时保持了代码的可读性和可维护性。 数据库引擎和连接池: SQLAlchemy 支持多种数据库后端,并且为每种后端提供了对应的数据库引擎。 它还提供了连接池管理功能,以优化数据库连接的创建、使用和释放。 会话管理: SQLAlchemy 使用会话(Session)来管理对象的持久化状态。 会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子函数。 这使得开发者可以在对象加载、修改、删除等操作时执行额外的逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值