python 멀 티 채 팅 서버 및 클 라 이언 트 구현

본 논문 의 사례 는 python 이 여러 명의 채 팅 서버 와 클 라 이언 트 를 실현 하 는 것 을 공유 하여 여러분 께 참고 하 시기 바 랍 니 다.구체 적 인 내용 은 다음 과 같 습 니 다.
사용 하 는 python 지식 포인트:
네트워크 프로 그래 밍:socket
다 중 스 레 드:threading
그래 픽 프로 그래 밍:tkinter
먼저 클 라 이언 트 가 연결 할 수 있 도록 서버 를 모 의 해 야 합 니 다.여기 서 순환 을 사용 하고 서비스 구역 이 계속 열 린 상태 에 있 도록 해 야 합 니 다.
그 다음 에 다 중 스 레 드 를 사용 해 야 합 니 다.다 중 스 레 드 가 변 수 를 공유 하고 동시에 실행 할 수 있 기 때 문 입 니 다.그렇지 않 으 면 서버 는 하나의 클 라 이언 트 만 연결 할 수 있 습 니 다.
다음은 먼저 코드 를 첨부 한 후에 어떻게 조작 하 는 지 설명 합 니 다.
첫 번 째 py 파일-서버

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") + "  
"# 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 = "
"#, 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 파일---클 라 이언 트

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 파일 을 실행 하면 나타 납 니 다.

그 중 첫 번 째 줄 은 호스트 의 ipv 4 주 소 를 표시 합 니 다.window 를 사용 하면 모 르 는 것 은 cmd 를 열 고 ipconfig 를 입력 하면 ipv 4 주 소 를 볼 수 있 습 니 다.
두 번 째 줄 은 포트 를 나타 내 는데 여 기 는 좀 큰 8080 또는 9876 등 을 사용 하 는 것 이 좋 습 니 다.그렇지 않 으 면 포트 점용 상황 이 발생 할 것 입 니 다.여 기 는 제 가 9876 을 사용 하 겠 습 니 다.
마지막 으로 앞의 두 줄 을 입력 한 후 시작 을 누 르 십시오.
2.두 번 째 파일 을 여러 번 복사 하여 각각 01.py,02.py 라 고 명명 하고 01.py 파일 을 실행 합 니 다.

이 첫 줄 에 입력 한 것 은 사용자 이름 입 니 다.임의의 문자 일 수 있 습 니 다.
두 번 째 줄 은 연결 할 서버 의 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 실행 후 인터페이스 입력 열기

그리고 발송 을 클릭 합 니 다.
그리고 02.py 가 실 행 된 화면 을 열 면 아래 가 나 옵 니 다.

이렇게 하면 python 으로 여러 사람의 채 팅 서버 와 클 라 이언 트(도형 화 인터페이스)를 모 의 하 는 목 표를 실현 했다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기