파이썬(python) 웹소켓 기초와 웹소켓 사용법 네트워크 프로그래밍
안녕하세요 오늘은 파이썬(Python) 웹소켓에 대해서 설명해 보려고 합니다
소켓이란 쉽게 설명하면 어떤 구멍인데요. 파이썬으로 캡처한 코드들은 맨 밑에
정리해두었습니다
웹이 돌아가는 구조는 서버와
클라이언트 식으로 돌아갑니다 클라이언트가 서버에 연결하려면 서버에는 소켓이
있어야만 연결되는데요 우리가 흔히 말하는 http 연결은 한번 연결 후 정보를 받은 후 연결을 끊지만 소켓은 http 연결이 이루어지기 전 Tcp 연결 후 그 상태를 유지하는 것이라고 볼 수 있습니다.
자 이 설명은 어느 정도 프로그래밍 지식과 네트워크 지식이 있는 사람은 그래 그렇지
라고 생각할 수 있는 설명인데요 그냥 소켓이라는 것은 우리가 인터넷에서 게임과 같은 실시간 데이터를 받아와야만 하는 것에 필요한 것이라고 생각합니다
여기서 포인트 "실시간으로 데이터를 받아와야 할 때" 사용하는 것이라고 생각하면 됩니다 설명이 너무 길었네요 파이썬으로 웹소켓을 다루는 방법을 설명하겠습니다
1. 파이썬에서 소켓 import
일단 아나콘다 또는 비주얼 스튜디오 등 파이썬(python) 언어를 적을 수 있는 에디터
를 켜주세요 ( 저는 아나콘다의 주피터 노트북을 사용했습니다)

일단 먼저 socket 을 import 해줍니다 파이썬 안에 내장되어 있는 함수이기에 패키지
다운로드 없이 바로 불러올 수 있습니다 !(time 과 threading 은 import 하지 않아도 됐
니다 ~~!!)
2. 파이썬 import 한 소켓으로 연결할 소켓 만들어주기

첫 번째 socket 은 소켓을 만들어주는 과정입니다 데이터를 스트림을 받고 AF_I NET는 IPV4 용도로 사용하겠다는 의미입니다
(어려울 수 있으니 외우는 것이 좋은 편이라고 생각합니다 소켓을 사용하기 전에 꼭 해줘야 하는 것입니다 )
그 후 만들어줄 소켓에 BIND 번호 클라이언트가 바인드 할 번호에 PORT 번호를 적어 줍니다 파이썬에서 포트 번호 앞에 '' 이렇게 적은 것은 로컬 호스트를 칭합니다
127.0.0.1이라고 적어도 되고 로컬 호스트 또는 자기가 연결하고 싶은 호스트 번호를 적어도 됩니다
나의 파이썬 코드
serverSock = socket(AF_I NET, SOCK_STREAM)
serverSock.bind(('',1234 ))
serverSock.listen(1)
3. 파이썬에서 서버 소켓이 연결을 대기하다가 클라가 소켓에 연결하면 수락하기

서버는 소켓의 연결을 항시 대기해야 하기 때문에 while 문을 사용했고 연결이 접속되면 위에 만들었던 serverSock.accept()라는 함수에 즉 소켓이 연결되면 돌아가는 함수로 socket 과 address 인터넷 주소와 소켓 정보가 나옵니다 socket.send 함수는
방금 연결을 걸어온 클라이언트에게 접속 성공하셨다고 문자열 또는 데이터를 보내는 함수입니다 (encode를 해준 이유는 한글은 3byte 지만 웬만한 스트림은 영어 기준인 EUC-KR로 읽기에 encode를 utf-8로 바꿔주었습니다)
4. 파이썬 클라이언트에서 서버 연결 후 서버에서 보낸 데이터 받기

위에 설명했던 방법과 동일한데요 클라언트에 소켓을 만들어준 후에 이번에는
connect라는 함수로 연결하는 ip와 서버에 적었던 port 번호 를 적어주고
서버에서 데이터를 보내주면 clentSocket이라는 곳에 recv 총 1024 byte로 받겠다는 의미로 msg 받은 후 다시 encode 해줬던 문자열을 decode 해줘서 열어보면 위에 서보에서 보냈던 data가 잘 도착했다는 것을 알 수 있습니다
이렇게 파이썬으로 socket 을 연결하는 방법을 배워봤는데요 사실 처음 보면 굉장히
복잡하고 어렵다고 느껴지실 수 있는데요 소켓과 스레드는 파이썬 또는 자바 모든 프로그래밍언어에서 어려운 편에 속합니다 하다가 익숙해지는 편이 좀 더 빠르고 좋은 지름길입니다 도움 되셨다면 공감 부탁드립니다
1 파이썬 서버 소켓 코드
from socket import *
import threading
serverSock = socket(AF_I NET, SOCK_STREAM)
serverSock.bind(('',1234 ))
serverSock.listen(1)
while True:
print('서버 대기 상태 ...')
soket, address = serverSock.accept()
soket.send( '접속 성공 하셨습니다'.encode('utf-8'))
2 파이썬 클라이언트 소켓 코드
from socket import *
import threading
clientSock = socket(AF_I NET, SOCK_STREAM)
clientSock.connect(('127.0.0.1',1234))
msg = clientSock.recv(1024)
print(f'{msg.decode("utf-8")}')