python 간이 채 팅 방 실현(Linux 단말기)
단체 대화방
1.기능:qq 단체 채 팅 과 유사 한 기능
1.누군가가 채 팅 방 에 들 어가 면 이름 을 입력 해 야 하 며 이름 은 중복 할 수 없습니다.
2.채 팅 방 에 들 어 가 는 사람 이 있 으 면 다른 사람 이 알림 을 받는다.
채 팅 방
3.한 사람 이 메 시 지 를 보 내 면 다른 사람 이 메 시 지 를 받는다.
xxx:xxxxxxxx
4.채 팅 방 에서 나 가 는 사람 이 있 으 면 다른 사람 도 알림 을 받는다.
채 팅 방
5.확장 기능:서버 메시지 공지,서버 에서 메 시 지 를 보 내 면 누구나 받 을 수 있 습 니 다.
관리자 메시지:xxxxxxxx
2.기술 모델 확정
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:[email protected]
:
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 = ('0.0.0.0',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 = ('127.0.0.1',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.decode()) #
#
pid = fork()
if pid < 0:
print('Error')
elif pid == 0: #
send_msg(s,name)
else: #
recv_msg(s)
main()
먼저 서버 를 실행 하고 클 라 이언 트 를 실행 합 니 다.이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
로마 숫자를 정수로 또는 그 반대로 변환그 중 하나는 로마 숫자를 정수로 변환하는 함수를 만드는 것이었고 두 번째는 그 반대를 수행하는 함수를 만드는 것이었습니다. 문자만 포함합니다'I', 'V', 'X', 'L', 'C', 'D', 'M' ; 문자열이 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.