1. 학습 순서

더보기

(1) 요약

  • 개념 → 구조 → 코드 → 실행 흐름

 

(2) 상세

  1. 네트워크 프로그래밍 개념 (모든 IT 기술 공통)
  2. 네트워크 프로그래밍 구조 (모든 IT 기술 공통)
  3. 네트워크 프로그래밍 코드 (언어마다 호출 함수 차이, 근본 원리 모든 IT 기술 공통)
  4. 네트워크 프로그래밍 실행 흐름 (모든 IT 기술 공통)

 

2. 실행 흐름

 

ㄴ 2.1 서버 코드와 실행 흐름

더보기

 

 

서버 간단 예시 코드

import sys
from PySide6.QtWidgets import QApplication, QMainWindow, QLabel
from PySide6.QtNetwork import QTcpServer, QHostAddress


class ServerWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("Server Window")

        self.label = QLabel("Waiting...", self)
        self.label.setGeometry(50, 50, 300, 50)

        self.server = QTcpServer(self)
        self.server.newConnection.connect(self.on_new_connection)

        # 가장 단순한 안전장치: 연결 소켓을 저장
        self.client_socket = None

        ok = self.server.listen(QHostAddress("127.0.0.1"), 8888)
        if not ok:
            self.label.setText("Listen failed")

    def on_new_connection(self):
        # 단일 클라이언트만 받는 가장 단순 버전
        self.client_socket = self.server.nextPendingConnection()
        self.client_socket.readyRead.connect(self.on_ready_read)

        self.label.setText("Client connected")

    def on_ready_read(self):
        data = self.client_socket.readAll()
        message = bytes(data).decode(errors="replace")
        self.label.setText(f"Received: {message}")


if __name__ == "__main__":
    app = QApplication(sys.argv)
    w = ServerWindow()
    w.show()
    sys.exit(app.exec())

 

ㄴ 2.2 클라이언트 코드와 실행 흐름

더보기

 

 

클라이언트  간단 예시 코드

import sys
from PySide6.QtWidgets import QApplication, QMainWindow, QPushButton, QLineEdit
from PySide6.QtNetwork import QTcpSocket


class ClientWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("Client Window")

        self.line = QLineEdit(self)
        self.line.setGeometry(50, 50, 200, 30)

        btn = QPushButton("Send", self)
        btn.setGeometry(50, 100, 100, 30)
        btn.clicked.connect(self.send_message)

        self.socket = QTcpSocket(self)
        self.socket.connectToHost("127.0.0.1", 8888)

    def send_message(self):
        self.socket.write(self.line.text().encode())


if __name__ == "__main__":
    app = QApplication(sys.argv)
    w = ClientWindow()
    w.show()
    sys.exit(app.exec())

 

ㄴ 2.3 소스코드 기반 흐름도