gpt4 book ai didi

python实现多人聊天服务器以及客户端

转载 作者:qq735679552 更新时间:2022-09-27 22:32:09 28 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章python实现多人聊天服务器以及客户端由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

本文实例为大家分享了python实现多人聊天服务器以及客户端,供大家参考,具体内容如下 。

所用python的知识点:

网络编程:socket 。

多线程:threading 。

图形化编程:tkinter 。

首先要模拟出一个服务器,以供客户端连接,注意这里的要用死循环,要让服务区一直处于开放的状态 。

其次要运用多线程,因为多线程共享变量而且可以同时并发的执行操作,否则服务器就只可以连接一个客户端 。

下面先附上代码后在解释其怎么操作:

第一个py文件--服务器

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
import tkinter
import socket, threading
 
win = tkinter.tk()  # 创建主窗口
win.title( '模拟服务器' )
win.geometry( "400x400+200+20" )
users = {} #用户字典,也可以连接数据库
 
 
def run(ck, ca):
     username = ck.recv( 1024 ) #接受客户端发送的信息以1k作为单位这里接受到的信息为byte类型
     users[username.decode( "utf-8" )] = ck #解码并储存用户的信息
     #print(users)
     printstr = " " + username.decode(" utf - 8 ") + " 连接\n" #在连接显示框中显示是否连接成功
     text.insert(tkinter.insert, printstr)
 
     while true:
         rdata = ck.recv( 1024 ) #接受客户端发送的信息以1k作为单位这里接受到的信息为byte类型
         datastr = rdata.decode( "utf-8" )
         infolist = datastr.split( ":" ) #分割字符串从而得到所要发送的用户名和客户端所发送的信息
         users[infolist[ 0 ]].send((username.decode( "utf-8" ) + "说" + infolist[ 1 ]).encode( "utf" ))
         #要发送信息的客户端向目标客户端发送信息
 
def start():
     ipstr = eip.get() #从输入端中获取ip
     portstr = eport.get() #从输入端中获取端口,注意端口取得时候不能被占用(可以取8080,9876,等)
     server = socket.socket(socket.af_inet, socket.sock_stream) #socked所准守ipv4或ipv6,和相关协议的
     server.bind((ipstr, int (portstr))) #绑定ip和端口号!!!1:注意输入的端口号是str型而这里的要传入int型
     #2:bind()的参数是一个元组的形式
     server.listen( 10 ) #设置监听,和设置连接的最大的数量
     printstr = "服务器启动成功\n" #,是否连接成功
     text.insert(tkinter.insert, printstr) #显示在信息窗口中
     while true: #这里用死循环是因为模拟的服务器要一直运行
         ck, ca = server.accept() #接受所连接的客户端的信息
         # 其中ca是ip和端口号组成的元组,ck有关客户端的信息
         t = threading.thread(target = run, args = (ck, ca)) #每连接一个客户端就开启一个线程
         #其中thread函数中的传入函数的参数也是以元组的形式
         t.start() #开启线程
 
 
def startsever():
     s = threading.thread(target = start) #启用一个线程开启服务器
     s.start() #开启线程
 
#下面是关于界面的操作
labelip = tkinter.label(win, text = 'ip' ).grid(row = 0 , column = 0 )
labelport = tkinter.label(win, text = 'port' ).grid(row = 1 , column = 0 )
eip = tkinter.variable()
eport = tkinter.variable()
entryip = tkinter.entry(win, textvariable = eip).grid(row = 0 , column = 1 )
entryport = tkinter.entry(win, textvariable = eport).grid(row = 1 , column = 1 )
button = tkinter.button(win, text = "启动" , command = startsever).grid(row = 2 , column = 0 )
text = tkinter.text(win, height = 5 , width = 30 )
labeltext = tkinter.label(win, text = '连接消息' ).grid(row = 3 , column = 0 )
text.grid(row = 3 , column = 1 )
win.mainloop()

第二个py文件---客户端

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
import tkinter
import socket
import threading
 
win = tkinter.tk()
win.title( "客户端2" )
win.geometry( "400x400+200+20" )
 
ck = none #用于储存客户端的信息
 
 
def getinfo():
     while true:
         data = ck.recv( 1024 ) #用于接受服务其发送的信息
         text.insert(tkinter.insert, data.decode( "utf-8" )) #显示在信息框上
 
 
def connectserver():
     global ck
     ipstr = eip.get()
     portstr = eport.get()
     userstr = euser.get()
     client = socket.socket(socket.af_inet, socket.sock_stream) #socked所准守ipv4或ipv6,和相关协议的
     client.connect((ipstr, int (portstr))) #连接ip和端口号!!!1:注意输入的端口号是str型而这里的要传入int型
     #2:bind()的参数是一个元组的形式
     client.send(userstr.encode( "utf-8" ))
     ck = client
 
     t = threading.thread(target = getinfo)
     t.start()
 
 
def sendmail():
     friend = efriend.get()
     sendstr = esend.get()
     sendstr = friend + ":" + sendstr
     ck.send(sendstr.encode( "utf-8" ))
 
 
#下面是界面
labeluse = tkinter.label(win, text = "username" ).grid(row = 0 , column = 0 )
euser = tkinter.variable()
entryuser = tkinter.entry(win, textvariable = euser).grid(row = 0 , column = 1 )
 
labelip = tkinter.label(win, text = "ip" ).grid(row = 1 , column = 0 )
eip = tkinter.variable()
entryip = tkinter.entry(win, textvariable = eip).grid(row = 1 , column = 1 )
 
labelport = tkinter.label(win, text = "port" ).grid(row = 2 , column = 0 )
eport = tkinter.variable()
 
entryport = tkinter.entry(win, textvariable = eport).grid(row = 2 , column = 1 )
 
button = tkinter.button(win, text = "启动" , command = connectserver).grid(row = 3 , column = 0 )
text = tkinter.text(win, height = 5 , width = 30 )
labeltext = tkinter.label(win, text = "显示消息" ).grid(row = 4 , column = 0 )
text.grid(row = 4 , column = 1 )
 
esend = tkinter.variable()
labelesend = tkinter.label(win, text = "发送的消息" ).grid(row = 5 , column = 0 )
entrysend = tkinter.entry(win, textvariable = esend).grid(row = 5 , column = 1 )
 
efriend = tkinter.variable()
labelefriend = tkinter.label(win, text = "发给谁" ).grid(row = 6 , column = 0 )
entryfriend = tkinter.entry(win, textvariable = efriend).grid(row = 6 , column = 1 )
 
button2 = tkinter.button(win, text = "发送" , command = sendmail).grid(row = 7 , column = 0 )
win.mainloop()

这里的客户端可以是多个,也就是将第二个py文件复制几分并分别储存在不同的文件中 。

这里注意:在pycharm中最好在一个项目中打开 。

1:将第一个文件命名为sever.py然后运行sever.py文件会出现 。

python实现多人聊天服务器以及客户端

其中第一行表示你的主机的ipv4地址,如果你用的window,不知道的可以打开cmd后输入ipconfig可以看到你的ipv4地址 。

第二行表示的是端口,这里最好用大一点8080或9876等,要不就会出现端口占用情况,这里我用9876 。

最后输入前两行后点击启动 。

2、将第二个文件多复制遍,分别命名为01.py,02.py......,运行01.py文件 。

python实现多人聊天服务器以及客户端

这里第一行输入的是你的用户名,注意可以是任意的字符 。

第二行输入的是你要连接的服务器的ip这里写你的ip(和上面的ip一样) 。

第三行输入的是端口注意第一个图上写的端口保持一致上 。

然后点击启动 。

然后在运行02.py,重复01.py中的操作但是注意用户名不能相同,二ip和端口号是相同的 。

如果你想更多的连接更多的客户端可以运行0.3.py重复02.py操作 。

3、到这里假设你创建了01.py和02.py并运行其中0.1.py中的username为123,02.py的username为456并且连个ip和端口号和sever.py中的ip和端口号相同,然后就可以操作两个人的聊天了 。

打开运行01.py后的界面输入 。

python实现多人聊天服务器以及客户端

然后点击发送 。

然后打开02.py运行后的界面会出现下面的 。

python实现多人聊天服务器以及客户端

这样就实现了用python模拟多人聊天服务器以及客户端(带图形化界面)的目标.

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我.

原文链接:https://blog.csdn.net/qq_41682681/article/details/80939682 。

最后此篇关于python实现多人聊天服务器以及客户端的文章就讲到这里了,如果你想了解更多关于python实现多人聊天服务器以及客户端的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com