내 잡다한 노트
소켓 프로그래밍 기초 Server/Client 본문
Server.py
from socket import *
serverSock = socket(AF_INET, SOCK_STREAM)
# 소켓 객체를 생성. param1: Address Family(=IPv4를 의미함), param2: socket type
#
serverSock.bind(('', 8080))
# bind는 서버에서 반드시 필요하다고 함. 생성된 소켓의 번호와 AF를 연결해주는 것.
# 8080번 포트에서 모든 인터페이스에게 연결되도록 한다라는 의미 ''는 모든 인터페이스와 연결
# 즉 브로드캐스트.
serverSock.listen(1)
# 상대방의 접속을 기다리는 단계
# 인자로 1을 준 것은 소켓이 총 몇개의 동시접속을 허용할 것인지에 대한 이야기. 하나만 동시접속 가능
# 입력하지 않으면 파이썬이 자의적으로 판단해 임의의 숫자로 LISTEN
connectionSock, addr = serverSock.accept()
# accept()는 누군가가 접속해 연결됐을 때 결과값이 return 되는 함수.
# 실행되면 return 값으로 새로운 소켓과 상대방의 AF(IP)를 전달해줌.
print(str(addr), '에서 접속이 확인됨')
data = connectionSock.recv(1024)
# 1024바이트로 데이터를 받는다.
# 데이터를 받을때까지 대기를 한다.
print('받은 데이터: ', data.decode('utf-8'))
# 데이터를 보낼땐 바이트로 보내야 하기 때문에 데이터를 받을때 바이트로 받기 때문에 그걸 문자열로 decode해줘야한다.
connectionSock.send('I am a server.'.encode('utf-8'))
print('메세지를 받음.')
Client.py
from socket import *
clientSock = socket(AF_INET, SOCK_STREAM)
clientSock.connect(('127.0.0.1', 8080)) # 127.0.0.1은 루프백 주소
# 실제로 네트워크에 연결하지 않고 동일한 시스템에서 프로그램을 테스트하는데 사용됨.
print('연결 확인')
clientSock.send('I am a client.'.encode('utf-8'))
# 문자열을 byte로 변환시켜 송신한다.
print('메시지 전송')
data = clientSock.recv(1024)
print('받은 데이터 : ', data.decode('utf-8'))
'네트워크' 카테고리의 다른 글
널널한 개발자의 네트워크 기초 이론 강의 메모 (0) | 2023.07.06 |
---|---|
[Windows 10] SSH로 리눅스 서버에 접속하기 (0) | 2023.05.22 |
SSH (0) | 2023.03.20 |
TCP와 UDP (0) | 2023.03.08 |
패킷(packet) (0) | 2023.03.08 |