鱼C论坛

 找回密码
 立即注册
查看: 2333|回复: 2

[原创] 使用Python做一个聊天室

[复制链接]
发表于 2020-3-7 10:23:47 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
使用 Socket 做的一个聊天室,分为客户端和服务端。

废话不多说,直接上代码:
客户端( Client.py ):
import socket
import threading as td

outString = ''
inString = ''

def client_send(client):
    global outString
    while True:
        string = '%s : %s' % (nick, input())
        client.send(string.encode('utf-8'))

def client_accept(client):
    global inString
    while True:
        try:
            inString = client.recv(1024)
            if not inString:
                break
            if outString != inString:
                print(outString)

        except:
            break


nick = input('请输入你的昵称:')
ip = input('请输入您的 IP:')
port= 8888

client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect((ip, port))
client.send(nick.encode('utf-8'))


td.Thread(target=client_send, args=(client, )).start()

td.Thread(target=client_accept, args=(client, )).start()

服务端( Server.py ):
import socket
import threading as td

people = 0

# 接受
def clientIn(conn, nick):
    global data, people

    while True:
        try:
            temp = conn.recv(1024)
            if not temp:
                conn.close()
                return
            NotifyAll(temp)
            print(data.decode('utf-8'))
        except:
            NotifyAll(nick.decode('utf-8') + '断开连接!')
            people -= 1
            print(data)
            return

def NotifyAll(ss):
    global data

    if con.acquire():
        data = ss
        con.release()

con = td.Condition()
host = input('请输入服务器的IP地址:')
port = 8888
data = ''

server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind((host, port))
server.listen(1)

print('服务器已创建')
    


while True:
    conn, addr = server.accept()
    nick = conn.recv(1024)
    NotifyAll('欢迎' + nick.decode('utf-8') + ' 到聊天群!')
    people += 1
    print(data)
    print('当前房间有' + str(people) + '人')

    conn.send(data.encode('utf-8'))

    td.Thread(target=clientIn, args=(conn, nick)).start()

演示:
捕获.PNG

评分

参与人数 4荣誉 +3 鱼币 +2 贡献 +2 收起 理由
zsy0226 -1 *
qiuyouzhi -3
zltzlt -2 -2
一个账号 + 5 + 5 + 5 鱼C有你更精彩^_^

查看全部评分

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-15 02:36:10 From FishC Mobile | 显示全部楼层
为什么客户之间不能聊天?服务器上有所有客户端消息,客户端之间没有消息
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-15 08:07:36 | 显示全部楼层
hjc757 发表于 2020-3-15 02:36
为什么客户之间不能聊天?服务器上有所有客户端消息,客户端之间没有消息

正在改进中...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-17 03:48

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表