udp 聊天室

本文详细介绍了如何使用UDP协议创建一个简单的聊天室应用,涵盖了网络编程基础、UDP套接字的使用、多线程处理并发请求等内容,帮助读者理解 UDP 在实时通信场景中的应用。
摘要由CSDN通过智能技术生成
---
title: udp聊天室
date: 2018-09-27 21:32:41
tags: udp聊天室
---

#服务器程序

		import socket
		import select
		import sys,os
		"""接收普通聊天消息"""
		s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
		s.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
		PORT = 9527
		s.bind(("127.0.0.1",PORT))
		#os.system('python3 myserver2.py %s'%PORT)
		enrc = "^^^^"
		addrlist = []
		namelist = []
		wilfgamename = [[]]  #[[1,2,3,4,5,6,7,8,9,10],[a,b,c,d,e,f,g,h,i,j]]
		wilfgameaddr = [[]] 
		# data = "welcome %s to join us"
		gamecount = 0 #游戏桌数量,默认从0开始
		playerNO = 12
		while True:
			# print(addrlist)
			# print(namelist)
			#recvfrom接收UDP消息,参数是每次接收消息的大小,返回接收到的内容
			print('waiting for recv')
			data,address = s.recvfrom(1024).decode()
			print(data)
			if '加入狼人杀' in data:
				name = data.decode().split(enrc)[0]
				wilfgamename[gamecount].append(name)
				wilfgameaddr[gamecount].append(address)
				if len(wilfgamename[gamecount]) >= playerNO:
					addrall = ''
					for x in wilfgameaddr[gamecount]:
						addrall += x[1] #取端口号
						addrall += '!!' #4653!!4653!!4655!!
					PORT += 1
					for x in wilfgameaddr[gamecount]:
						s.sendto('begin wolf kill!!!!%s'%PORT,x)
					
					os.system('python3 myserver2.py %s %s %s'%(PORT,'``'.join(wilfgamename[gamecount]),addrall))
					gamecount += 1
					wilfgamename.append(list())
					wilfgameaddr.append(list())
			elif '取消狼人杀' in data:
				name = data.decode().split(enrc)[0]
				wilfgamename[gamecount].remove(name)
				wilfgameaddr[gamecount].remove(address)
			# s.sendto(data,address)
			# s.sendto(b'server recv your msg',address)
			if enrc in data.decode():
				name = data.decode().split(enrc)[0]
				# print("name:",name)
				if data.decode().endswith("quit"): 
					addrlist.remove(address)
					namelist.remove(name)  
					for i in range(len(addrlist)):
						s.sendto((name+" quit").encode(),addrlist[i])       
				else:
					if address in addrlist:
						pass
					else:
						addrlist.append(address)

						namelist.append(name)
					for x in addrlist:
						s.sendto(data,x)
					time.sleep(1)
					for x in addrlist:
						s.sendto(data,x)
		s.close()

		
#客户端程序	

		from multiprocessing import Process,Queue
		from tkinter import Frame,Text,END,Scrollbar
		import socket
		import os
		import time
		from tkinter import *
		import tkinter.messagebox
		import random 
		import threading
		from multiprocessing import Process,Queue
		from tkinter import scrolledtext


		name = sys.argv[1]

		q = Queue()
		s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
		s.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
		class GuiPart():
			def __init__(self,master,queue,endCommand,enrc='^^^^',HOST = "127.0.0.1",PORT = 9527):
				self.queue=queue
				self.enrc = enrc
				self.HOST = HOST
				self.PORT = PORT
				self.playstatus = True
				self.var = StringVar()
				self.var.set('停止')
				self.wolfstatus = True
				self.wolf = 
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值