본문 바로가기
Python

Python 소켓 프로그래밍(2) - 채팅 프로그램 구현.

by 웹하는빡통 2019. 11. 16.

저번 소켓프로그래밍 시간에는 간단한 송./수신 프로그램을 만들어 보았다.

 

이번 시간에는 간단한 송/수신이 아닌 상대방과 채팅하는 프로그램을 구현하도록 해보겠다 

 

Python을 이용한 채팅 프로그램 구현.

Server.

여기서 Thread을 이용하여 프로그램을 구현해보자. 여기서 Thread를 사용하는 이유는

우리가 서버와 클라이언트에서 메시지를 보낼때 순서에 상관없이 보낼수 있도록 하기 위해서이다. 모든 프로그램에서도 Thread를 이용하면 하나의 프로그램에서 한번에 하나의 일을 처리하는 것이아니라 동시에 많은 일을 처리할 수 있다.

 

Thread() 생성자는 여러가지 인자를 받는다, 여기에서는 target과 args만 주목하자.
 target은 실제로 스레드가 실행할 함수를 넣어주면 되고,함수에게 전달할 인자를 args에 넣어주면 된다.

 

여기서 주의해야할 사항이 있다. 바로 args=(connectionsock,)이다. args에서 인자가 하나일 경우()안에 ,을 넣어야만 튜플로 인식하므로 주의해야한다 즉 args(connectionsock)이 아니라 args=(connectionsock,)이렇게 해줘야 한다.

이렇게 생성된 스레드는 start()를 실행했을 때 비로소 일을 시작하는데.  쓰레드 특성상 본인의 일이 끝나면 자동으로 사라지는데. 여기서는 지속적으로 채팅을 해야하므로 쓰레드를 영구적으로 실행시켜야한다 그래서 send와 receive에 while True가 들어간 것이다. 이제 sender와 receiver는 프로세스가 종료되지 않는 한은 프로그램은 계속 실행 될 것이다.

그러나, 스레드는 특별한 경우가 아니고선 프로세스가 종료될 때 자기 자신들도 같이 종료가 된다. 스레드가 아무리 while True로 영원히 돌게 만들어졌다 하더라도, 프로세스가 종료되면 스레드같이 종료가 된다. 그러므로 메인인 프로세스도 계속 돌아가게 해야하는데 아래 코드를 마지막에 추가해주면 된다.

while True:
pass //프로그램을 강제 종료 하지 않는 이상 계속적으로 프로그램이 싱행됨.

 

 

Client

 

 

실행 결과

정상적으로 실행이되면 먼저 서버에서 클라이언트로 메시지를 보내보자.

 

 

변태 머머리 아저씨가 작업을 거는거 같다. 메시지를 보내보도록 하자. 

자 이제 클라이언트에서 서버(머머리)가 보낸 메시지가 온것을 확인 할 수 있다. 이젠 클라이언트에서 서버로 메시지를 보내보자.

 

댓글