728x90
서버와 클라이언트가 서로 양방향 통신을 하기 위해서는 Thread를 사용해야 합니다.
먼저 서버 코드입니다.
#tcpserver.py
from socket import *
import threading
import time
def send(sock): # 데이터 송신 함수
while True:
sendData = input(">>>")
sock.send(sendData.encode("utf-8"))
def recv(sock): # 데이터 수신 함수
while True:
data = connectionSocket.recv(1024)
print("상대방 ", data.decode("utf-8"))
host = "127.0.0.1"
port = 12345
serverSocket = socket(AF_INET, SOCK_STREAM)
serverSocket.bind((host,port))
serverSocket.listen(1)
print("대기중입니다")
connectionSocket,addr = serverSocket.accept()
print(str(addr),"에서 접속되었습니다.")
sender = threading.Thread(target=send, args=(connectionSocket,)) # 송신 쓰레드
receiever = threading.Thread(target=recv, args=(connectionSocket,)) # 수신 쓰레드
sender.start()
receiever.start()
while True:
time.sleep(1) # thread 간의 우선순위 관계 없이 다른 thread에게 cpu를 넘겨줌
pass # sleep(0)은 cpu 선점권을 풀지 않음
serverSocket.close() # 서버 닫기
다음은 클라이언트 코드입니다.
# tcpclient.py
from socket import *
import threading
import time
def send(sock):
while True:
sendData = input(">>>")
clientSocket.send(sendData.encode("utf-8"))
def recv(sock):
while True:
data = clientSocket.recv(1024)
print("상대방 : ", data.decode("utf-8"))
ip = "127.0.0.1"
port = 12345
clientSocket = socket(AF_INET, SOCK_STREAM)
clientSocket.connect((ip,port))
print("접속 완료")
sender = threading.Thread(target=send, args=(clientSocket,))
receiver = threading.Thread(target=recv, args=(clientSocket,))
sender.start()
receiver.start()
while True:
time.sleep(1)
pass
clientSocket.close()


728x90
'Programming > Python' 카테고리의 다른 글
Python TCP 소켓 프로그래밍하기 (1) | 2020.01.13 |
---|---|
Python 예외 처리하기 (0) | 2020.01.10 |
Python 모듈 사용하기(random, datetime, time) (0) | 2020.01.10 |
Python class 사용하기 (0) | 2020.01.10 |
Python 터틀 그래픽 사용하기 (0) | 2020.01.09 |