前情提要
闲的无聊,于是去学了一下python网络编程
利用本地局域网(如果你们要用那么可能需要改一下ip)建立了一个聊天室
我的参考资料
https://zhuanlan.zhihu.com/p/42695834
https://www.runoob.com/python/python-socket.html
https://blog.csdn.net/qq_37193537/article/details/91043580
https://www.runoob.com/python3/python3-multithreading.html
https://www.cnblogs.com/zhaop8078/p/11359792.html
我打出来的代码
服务端
import socket
import threading
ip_port = ('192.168.19.74',9999)
sk=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
sk.bind(ip_port)
sk.listen(1)
yh=[]
def fs(msg):
for i in yh:
try:
i.send(msg.encode('utf-8'))
except Exception as e:
pass
else:
pass
def js(sed,dree):
while 1:
date=sed.recv(1024).decode('utf-8')#接受信息
if date=='exit':
sed.close#结束连接
break
msg=str(dree)+': '+str(date)
#print(msg)
fs(msg)
def work():
while 1:
try:
#print('等待用户连接')
sed,dree=sk.accept()
yh.append(sed)
#加入提示
msg='有用户加入:'+str(dree)+' 目前有'+str(len(yh))+'用户在线'
print(msg)
fs(msg)
sed.send('欢迎来到在线聊天室(目前支持10人同时聊天)'.encode('utf-8'))
js(sed,dree)
except Exception as e:
#print('错误:',e)
pass
else:
pass
#退出提示
yh.remove(sed)
msg='有用户退出:'+str(dree)+' 目前有'+str(len(yh))+'用户在线'
print(msg)
fs(msg)
dxc=[]
if __name__ == "__main__":
for i in range(10):
dxc.append(threading.Thread(target=work))
for i in dxc:
i.setDaemon(1)
i.start()
for i in dxc:
i.join()
客户端
import socket
import threading
import time
ip_port = ('192.168.19.74',9999)
sk=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
sk.connect(ip_port)
def js():
while 1:
date=sk.recv(1024)#接受信息
print(date.decode('utf-8'))
sw=threading.Thread(target=js)
sw.setDaemon(1)
sw.start()
while 1:
date=input()
sk.send(date.encode(encoding='utf-8'))
if date=='exit':
break
sk.close#结束连接
分享的好玩意,学习学习!!
如果使用代码需要修改代码IP的话,灵活性稍差,hh
可以考虑使用udp广播 然后局域网内的相同程序会自动回复 那么就可以获得局域网里的所有其他客户端的ip了。
UDP目前还没去学,只会tcp
目前在学习使用Tkinter优化客户端
其实就是把里面的ip改为服务器运行的电脑的本地ip
tql%%%
tql%%%
巨佬