본문 바로가기

Python/통신

Python QThread 소켓 통신.

 

통신이 1:1로 n개가 있어야 하는 프로그램을 만들고 있는데.. 

그걸 못해서 자꾸 해매다가... 어쩌다가 성공!!


class Main(QDialog, ...): 
	def __int__(self):
      self.worker = Worker()                          #백그라운드에서 돌아갈 인스턴스 소환
      self.worker_thread = QThread()                  #따로 들어갈 thread를 하나 생성
      self.worker.moveToThread(self.worker_thread)    #worker를 만들어둔 쓰레드에 넣기
      self.worker_thread.start()                      #쓰레드 실행
      self._connectSignals()                          #시그널을 연결하기 위한 함수 호출
      
class Worker(QObject):
	def __init__(self, parent = None):
    	super(self.__class__,self).__init__(parent)
        self.mutex = QMutex()
        
    def run(self):
    	# TCP socket 설정
        serverSock = socket(AF_INET, SOCK_STREAM)
        # socket IP Port 튜플로 지정.
        serverSock.bind(('', 4000))
        # socket 클라이언트로부터 오는 신호 읽음.
        serverSock.listen(1)
    
    	while True:
        	# 읽은 신호의 주소 수락.
            connectionSock, addr = serverSock.accept()
            
            self.function(connectionSock)
            
   	def function(self, connectionSock):
    	self.mutex.lock()
        
        알고리즘..
        
        self.mutex.unlock()

 이런 식으로 짜면 다중 소켓 통신이 되는거 같다.... (저는 됐습니다.)

 

QMutex()가 Thread에서 lock과 비슷하다고 합니다. 

QThread를 사용할경우 쓰는 함수인거 같습니다.

 

아래에 블로그에 되게 많이 도움이 됐습니다.!

 

QThread 참고

https://m.blog.naver.com/PostView.nhn?blogId=townpharm&logNo=220959370280&proxyReferer=https%3A%2F%2Fwww.google.com%2F

 

[Python3] PyQt5 | QThread-pyqtSignal/Slot Example

이번에 알아볼까 하는 내용은 QThread 입니다. 최근에 알리미 프로그램을 짜봐서 그것을 gui와 함께 깔끔...

blog.naver.com

Socket 참고

https://soooprmx.com/archives/8737

 

파이썬 소켓 연결 사용법 · Wireframe

네트워크 프로그래밍 분야에서 소켓은 연결된 네트워크의 양 끝단을 추상화 시킨 개념이며, 컴퓨터의 관점에서는 네트워크로 통하는 컴퓨터의 외부와 컴퓨터 내부의 프로그램을 이어주는 인터페이스이다. 소켓의 개념에 대해서 이 글에서 모두 소상히 설명할 수는 없고, 네트워크를 통해서 바이트스트림을 주고 받을 수 있는 창구라 보면 된다. 다만 단순히 프로그램의 내부와 외부를 잇는 표준 입출력과는 달리 소켓은 네트워크의 반대편이 어디인지에 … 파이썬 소켓 연결 사용법

soooprmx.com

 

'Python > 통신' 카테고리의 다른 글

Python 소켓통신 (TCP / UDP)  (0) 2019.05.20