【移动应用开发技术】怎么用python代码实现简易聊天室_第1页
【移动应用开发技术】怎么用python代码实现简易聊天室_第2页
【移动应用开发技术】怎么用python代码实现简易聊天室_第3页
【移动应用开发技术】怎么用python代码实现简易聊天室_第4页
【移动应用开发技术】怎么用python代码实现简易聊天室_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

【移动应用开发技术】怎么用python代码实现简易聊天室

这篇文章主要介绍了怎么用python代码实现简易聊天室的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么用python代码实现简易聊天室文章都会有所收获,下面我们一起来看看吧。1.功能:类似qq群聊功能1.有人进入聊天室需要输入姓名,姓名不能重复2.有人进入聊天室,其他人会受到通知xxx进入聊天室3.一个人发消息,其他人会受到消息xxx:xxxxxxxx4.有人退出聊天室,其他人也会收到通知xxx退出聊天室5.扩展功能:服务端消息公告,服务端发送消息所有人都能收到管理员消息:xxxxxxxx2.确定技术模型1.服务端和客户端服务端处理请求,发送管理员消息客户端执行各种功能2.套接字选择:udp套接字3.消息发送模型:转发客户端~>服务端~>其他客户端4.存储用户信息:{name:addr}5.处理收发关系:多进程分别处理收发3.注意事项1.设计封装方案2.写一个功能模块测试一个模块3.注意注释的添加#coding

=utf-8

"""

chat

room

env:python3.5

exc:socket

and

fork

name:mianmabb

email:mianmabb@163.com

服务端功能:

1.搭建网络通信

2.处理进入聊天室

*

接收姓名

*

判断是否允许进入

*

将结果反馈给客户端

*

如果不允许则结束,允许则将用户插入数据结构

*

给其他人发送通知

3.处理聊天

*

接收消息,判断消息类型,分为L(输入姓名),C(发消息),Q(退出聊天室)

*

将消息转发

4.处理退出聊天室

5.发送管理员消息

"""

from

socket

import

*

from

os

import

*

from

sys

import

*

user

=

{}

#创建空字典用来存储用户的昵称和地址

#处理登录

def

do_login(s,name,addr):

if

name

in

user:

#判断昵称是否已经存在

s.sendto("该昵称已被占用".encode(),addr)

return

else:

#昵称不存在,则发送约定好的"OK"

s.sendto(b"OK",addr)

#功能:有人进入聊天室,其他人会收到消息

msg

=

"

欢迎

%s

进入聊天室

"%name

for

i

in

user:

#发送该条消息给其他用户

s.sendto(msg.encode(),user[i])

user[name]

=

addr

#将该用户插入数据结构(字典)

#处理聊天

def

do_chat(s,name,text):

msg

=

"%s

:

%s"%(name,text)

#设置消息显示格式

for

i

in

user:

s.sendto(msg.encode(),user[i])

#处理退出

def

do_quit(s,name):

msg

=

"%s

退出了聊天室"%name

for

i

in

user:

if

i

!=

name:

#给其他人发送该用户退出的消息

s.sendto(msg.encode(),user[i])

else:

#给该用户客户端发送约定好的EXIT让父进程退出

s.sendto(b"EXIT",user[i])

del

user[name]

#删除字典中该用户

#处理请求

def

do_request(s):

#循环接受所有客户请求

while

True:

try:

data,addr

=

s.recvfrom(1024)

except

KeyboardInterrupt:

#捕获父进程直接退出错误

exit("服务端退出!")

#

print(data.decode())

msgList

=

data.decode().split()

#按空格拆分为列表,方便索引

if

msgList[0]

==

"L":

#判断消息类型

do_login(s,msgList[1],addr)

elif

msgList[0]

==

"C":

text

=

"

".join(msgList[2:])

#将消息中可能有的空格加回来

do_chat(s,msgList[1],text)

elif

msgList[0]

==

"Q":

do_quit(s,msgList[1])

def

main():

s

=

socket(AF_INET,SOCK_DGRAM)

ADDR

=

("",8888)

s.bind(ADDR)

#创建进程

pid

=

fork()

if

pid

<

0:

print("Error")

elif

pid

==

0:

#子进程用来发送管理员消息

while

True:

try:

text

=

input("管理员

:

")

except

KeyboardInterrupt:

#捕获子进程直接退出错误

exit()

msg

="C

管理员

%s"%text

s.sendto(msg.encode(),ADDR)

else:

#父进程用来处理请求

do_request(s)

main()客户端功能:"""

1.搭建通信

2.进入聊天室

*

输入姓名

*

发送给服务器

*

接收服务器反馈

*

不允许则重新输入,允许则进入聊天室

*

创建新的进程用于消息收发

3.聊天

*

循环发送消息

消息类型分为L(输入姓名),C(发消息),Q(退出聊天室)

*

循环接收消息

4.退出聊天室

5.接受管理员消息

"""

from

socket

import

*

from

os

import

*

from

sys

import

*

ADDR

=

("",8888)

#填写服务端地址

#循环发送消息

def

send_msg(s,name):

while

True:

try:

text

=

input()

#客户输入要发送的消息

except

KeyboardInterrupt:

#子进程

防止用户Ctrl+C直接退出

text

=

"quit"

if

text.strip()

==

"quit":

#规定输入quit退出

msg

=

"Q

"

+

name

#消息类型,姓名

s.sendto(msg.encode(),ADDR)

exit("您已退出聊天室")

else:

msg

=

"C

%s

%s"%(name,text)

#消息类型,姓名,消息

s.sendto(msg.encode(),ADDR)

#循环接收信息

def

recv_msg(s):

while

True:

try:

data,addr

=

s.recvfrom(1024)

except

KeyboardInterrupt:

#父进程

防止用户Ctrl+C直接退出

exit()

if

data.decode()

=="EXIT":

#当用户退出,无需再收消息,约定EXIT让父进程退出

exit()

#退出父进程

print(data.decode())

#创建网络连接

def

main():

s

=

socket(AF_INET,SOCK_DGRAM)

while

True:

name

=

input("请输入昵称:")

#输入姓名

if

not

name:

return

msg

=

"L

"

+name

#发送请求

s.sendto(msg.encode(),ADDR)

#等待回复

data,addr

=

s.recvfrom(1024)

if

data.decode()

==

"OK":

print("您已进入聊天室")

break

else:

#登录失败

print(data.deco

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论