python两个客户端互发信息

一、

#在一台电脑上即可完成聊天

#这里是服务器

import socket
import threading

# 用于转发消息的函数
def handle_client(client_socket, client_address, clients):
    print(f"客户端 {client_address} 已连接")

    while True:
        try:
            # 接收客户端消息
            message = client_socket.recv(1024).decode('utf-8')
            if not message:
                break  # 如果没有消息,说明客户端断开连接
            print(f"来自 {client_address} 的消息: {message}")

            # 将消息转发给所有已连接的客户端
            for client in clients:
                if client != client_socket:
                    try:
                        client.send(f"来自 {client_address} 的消息: {message}".encode('utf-8'))
                    except:
                        continue
        except ConnectionResetError:
            break

    # 移除断开的客户端
    clients.remove(client_socket)
    client_socket.close()
    print(f"客户端 {client_address} 已断开连接")

# 启动服务器
def start_server():

    server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    server_socket.bind(('0.0.0.0', 9999))  # 绑定 IP 和端口
    server_socket.listen(5)  # 最大允许 5 个连接排队
    print("服务器已启动,等待客户端连接...")
    #
    clients = []  # 存储所有连接的客户端
    #
    while True:
        client_socket, client_address = server_socket.accept()  # 接受客户端连接
        clients.append(client_socket)
        client_thread = threading.Thread(target=handle_client, args=(client_socket, client_address, clients))
        client_thread.start()  # 为每个客户端创建一个线程

if __name__ == "__main__":
    start_server()

二、

#搭建两个以上的客户端python文件:

import socket
import threading

# 接收消息的线程
def receive_messages(client_socket):
    while True:
        try:
            message = client_socket.recv(1024).decode('utf-8')
            print(message)
        except:
            break

# 启动客户端
def start_client():
    client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    host = '127.0.0.1'  # 服务器 IP 地址 (本地测试使用)
    port = 9999  # 服务器端口
    client_socket.connect((host, port))  # 连接到服务器

    # 创建接收消息的线程
    receive_thread = threading.Thread(target=receive_messages, args=(client_socket,))
    receive_thread.start()

    print("连接到服务器,输入消息并按回车发送:")

    while True:
        message = input()  # 用户输入消息
        if message.lower() == 'exit':  # 输入 'exit' 退出
            break
        client_socket.send(message.encode('utf-8'))  # 发送消息到服务器

    client_socket.close()

if __name__ == "__main__":
    start_client()

运行方式为:先运行server.py文件的代码,然后运行另外的两个client.py文件。两个client文件代码一样。

运行结果如下:

### 关于ArcGIS License Server无法启动的解决方案 当遇到ArcGIS License Server无法启动的情况,可以从以下几个方面排查并解决问题: #### 1. **检查网络配置** 确保License Server所在的计算机能够被其他客户端正常访问。如果是在局域网环境中部署了ArcGIS Server Local,则需要确认该环境下的网络设置是否允许远程连接AO组件[^1]。 #### 2. **验证服务状态** 检查ArcGIS Server Object Manager (SOM) 的运行情况。通常情况下,在Host SOM机器上需将此服务更改为由本地系统账户登录,并重启相关服务来恢复其正常工作流程[^2]。 #### 3. **审查日志文件** 查看ArcGIS License Manager的日志记录,寻找任何可能指示错误原因的信息。这些日志可以帮助识别具体是什么阻止了许可服务器的成功初始化。 #### 4. **权限问题** 确认用于启动ArcGIS License Server的服务账号具有足够的权限执行所需操作。这包括但不限于读取/写入特定目录的权利以及与其他必要进程通信的能力。 #### 5. **软件版本兼容性** 保证所使用的ArcGIS产品及其依赖项之间存在良好的版本匹配度。不一致可能会导致意外行为完全失败激活license server的功能。 #### 示例代码片段:修改服务登录身份 以下是更改Windows服务登录凭据的一个简单PowerShell脚本例子: ```powershell $serviceName = "ArcGISServerObjectManager" $newUsername = ".\LocalSystemUser" # 替换为实际用户名 $newPassword = ConvertTo-SecureString "" -AsPlainText -Force Set-Service -Name $serviceName -StartupType Automatic New-ServiceCredential -ServiceName $serviceName -Account $newUsername -Password $newPassword Restart-Service -Name $serviceName ``` 上述脚本仅作为示范用途,请依据实际情况调整参数值后再实施。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值