鱼C论坛

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

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

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

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

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

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

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

  3. outString = ''
  4. inString = ''

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

  10. def client_accept(client):
  11.     global inString
  12.     while True:
  13.         try:
  14.             inString = client.recv(1024)
  15.             if not inString:
  16.                 break
  17.             if outString != inString:
  18.                 print(outString)

  19.         except:
  20.             break


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

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


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

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

复制代码


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

  3. people = 0

  4. # 接受
  5. def clientIn(conn, nick):
  6.     global data, people

  7.     while True:
  8.         try:
  9.             temp = conn.recv(1024)
  10.             if not temp:
  11.                 conn.close()
  12.                 return
  13.             NotifyAll(temp)
  14.             print(data.decode('utf-8'))
  15.         except:
  16.             NotifyAll(nick.decode('utf-8') + '断开连接!')
  17.             people -= 1
  18.             print(data)
  19.             return

  20. def NotifyAll(ss):
  21.     global data

  22.     if con.acquire():
  23.         data = ss
  24.         con.release()

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

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

  32. print('服务器已创建')
  33.    


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

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

  42.     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-4-28 02:47

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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