利用python与同学远程聊天

一天,你和你的好基友 放学回来,想和同学聊天,可又不想用微信,这款代码可以解决我们的烦恼。话不多说,直接上代码

SERVER端

import socket
import threading

def handle_client(client_socket, client_address):
    nickname = client_socket.recv(1024).decode()
    print(f"客户 {client_address[0]}:{client_address[1]} 连接方名称为 {nickname}")
    broadcast_message(f"{nickname} 加入了聊天", client_address, nickname)

    while True:
        try:
            data = client_socket.recv(1024).decode()
            if data:
                print(f"收到的消息来自于 {client_address[0]}:{client_address[1]} - {data}")
                broadcast_message(data, client_address, nickname)
        except:
            print(f"客户 {client_address[0]}:{client_address[1]} 断开了连接")
            broadcast_message(f"{nickname} 离开了聊天", client_address, nickname)
            client_socket.close()
            break

def broadcast_message(message, sender_address, sender_nickname):
    for client_socket, client_address, client_nickname in clients:
        if client_address != sender_address:
            client_socket.sendall(f"{sender_nickname}: {message}".encode())

def start_server(port):
    server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    server_socket.bind(('0.0.0.0', port))
    server_socket.listen(5)
    print(f"服务器此端口上启动 {port}")

    while True:
        client_socket, client_address = server_socket.accept()
        client_nickname = client_socket.recv(1024).decode()
        clients.append((client_socket, client_address, client_nickname))
        threading.Thread(target=handle_client, args=(client_socket, client_address)).start()

clients = []

if __name__ == "__main__":
    port = int(input("请输入服务器端口:"))
    start_server(port)

CLIEND端

import socket
import threading

def receive_messages():
    while True:
        try:
            data = client_socket.recv(1024).decode()
            if data:
                print(data)
        except:
            print("与服务器断开连接")
            client_socket.close()
            break

def send_message():
    while True:
        message = input()
        if message:
            client_socket.sendall(message.encode())

def start_client(server_ip, server_port):
    global client_socket
    client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    client_socket.connect((server_ip, server_port))
    print(f"已连接到服务器 {server_ip}:{server_port}")

    nickname = input("输入您的昵称(请输入第一遍):")
    print('请输入第二遍以便确认')
    client_socket.sendall(nickname.encode())
    threading.Thread(target=receive_messages).start()
    threading.Thread(target=send_message).start()

if __name__ == "__main__":
    server_ip = input("输入服务器IP地址:")
    server_port = int(input("输入服务器端口:"))
    start_client(server_ip, server_port)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Tuokoo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值