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()
실행 결과:이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 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에 따라 라이센스가 부여됩니다.