python 은 C/S 모드 를 바탕 으로 채 팅 방 기능 을 실현 합 니 다.

4316 단어 python채 팅 방
가장 간단 한 모드,C/S 모드 구현 채 팅 방
반 쌍 공 으로 시작 해서 반 쌍 공 이 라 니 요?반 양 방향 은 쌍방 이 서로 메 시 지 를 보 낼 수 있 지만 한 번 에 한 명의 사용자 만 보 낼 수 있다 는 것 이다.
 socket 프로 그래 밍 을 조금 만 할 줄 아 는 사람 은 모두 간단 하 다 고 생각 하기 때문에 지나 가면 바로 코드 를 올 립 니 다.
서버 쪽 코드:

from socket import *
from time import ctime
 
HOST = ''
PORT = 4568
BUFSIZE = 1024
ADDR = (HOST,PORT)
 
tcpSerSocket = socket(AF_INET, SOCK_STREAM)
tcpSerSocket.bind(ADDR)
tcpSerSocket.listen(5)
 
while True:
 print('waitint for connection...')
 tcpCliSocket, addr = tcpSerSocket.accept()
 print('connecting from: ', addr)
 
 while True:
 data = tcpCliSocket.recv(BUFSIZE)
 if not data:
  break
 print data
 msg = raw_input('>')
 tcpCliSocket.send('[%s] %s' % (ctime(), msg))
 
tcpCliSocket.close()
tcpSerSocket.close()
클 라 이언 트 코드:

from socket import *
 
HOST = 'localhost'
PORT = 4568
BUFSIZE = 1024
ADDR = (HOST, PORT)
 
tcpCliSocket = socket(AF_INET, SOCK_STREAM)
tcpCliSocket.connect(ADDR)
 
while True:
 data = raw_input('>>')
 if not data:
 break
 tcpCliSocket.send(data)
 data = tcpCliSocket.recv(BUFSIZE)
 if not data:
 break
 print data
 
tcpCliSocket.close()
실행 결 과 는 캡 처 하지 않 겠 습 니 다.아직 모 르 면 복사 해서 실행 하 겠 습 니 다.
위 에는 단지 가장 간단 한 입문 일 뿐,조금도 사용 하기 어렵 고 문제 가 많다.
다음은 전 쌍 공 을 어떻게 실현 하 는 지 보 자.전 쌍 공 은 쌍방 이 임의로 상대방 에 게 소식 을 보 낼 수 있 는 것 이다.
전 양 방향 작업 은 분명히 다 중 스 레 드 를 사용 해 야 한다.저 희 는 메 인 라인 밖에서 두 개의 키 스 레 드 를 만 들 고 하 나 는 메 시 지 를 받 는 것 을 책임 지 며 다른 하 나 는 사용자 의 입력 을 받 고 메 시 지 를 보 내 는 것 을 책임 집 니 다.
서버 쪽 코드:

#coding: utf-8
from socket import *
from time import ctime
import threading
from sys import stdout
 
HOST = ''
PORT = 21567
BUFSIZE = 1024
ADDR = (HOST, PORT)
 
def Send(sck):
 while True:
 data = raw_input('>')
 sck.send(data)
 
def Deal(sck, addr):
 while True:
 data = sck.recv(BUFSIZE)
 if data == "quit":
  sck.close()
  break
 str = '
from' + addr[0] + ':' + data + '
>' stdout.write(str) chatSerSock = socket(AF_INET, SOCK_STREAM) chatSerSock.bind(ADDR) chatSerSock.listen(5) threads = [] while True: print 'waiting for connection...' chatCliSock, addr = chatSerSock.accept() print "...connected from: ", addr t = threading.Thread(target=Deal, args=(chatCliSock, addr)) threads.append(t) t = threading.Thread(target=Send, args=(chatCliSock,)) threads.append(t) for i in range(len(threads)): threads[i].start() threads[0].join() chatCliSock.close() chatSerSock.close()
클 라 이언 트 코드:

#coding: utf8
from socket import *
from time import ctime
import threading
from sys import stdout
 
def Send(sck, test):
 while True:
 data = raw_input('>')
 sck.send(data)
 if data == "quit":
  break
def Recieve(sck, test):
 while True:
 data = sck.recv(BUFSIZ)
 if data == "quit":
  sck.close()
  break
 str = "
from server:" + data + "
>" stdout.write(str) HOST = 'localhost' PORT= 21567 BUFSIZ = 1024 ADDR = (HOST, PORT) threads = [] if __name__ == "__main__": chatCliSock = socket(AF_INET, SOCK_STREAM) chatCliSock.connect(ADDR) t = threading.Thread(target=Send, args = (chatCliSock, None)) threads.append(t) t = threading.Thread(target=Recieve, args = (chatCliSock, None)) threads.append(t) for i in range(len(threads)): threads[i].start() threads[0].join() chatCliSock.close()
실행 결과:

이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기