본문 바로가기

Programming/Python

[ Python note ] socket

socket.socket() 의 함수로 소켓을 생성 (소켓 통신을 할려면 소캣이 필요함)

AF_INET : IPv4
AF_INET6 : IPv6

 

소켓 타입 : raw소켓, 스트림 소켓, 데이터그램 소켓
보통 많이 쓰는 것 : SOCK_STREAM, SOCK_DGRAM

 

# socket.AF_INET, socket.SOCK_STREAM 조합은 "socket.socket()의인자의 기본 값임
그러므로 >> socket.socket()만 써도 됨

 

######################################################################


[[[[ Server ]]]]
- 바인드
서버가 소켓을 포트에 맵핑하는 행위 : 바인딩 >> sock.bind()

bind()호출 시 호스트림과 포트번호를 튜플로 감싸서 전달

ex) server_socket.bind((HOST,PORT))

HOST에 자신의 아이피, PORT에 클라이언트랑 연결할 포트
- 리스닝
이 메소드는 클라이언트가 바인드된 포트로 연결할 때 까지 기다리는 블럭킹 함수 >> listen()
accept()는 (소켓, 주소정보)로 구성된 튜플을 리턴 >> 이때 소켓은 객체로 클라이언트와 연결이 구성되어 
실제로 데이터를 주고받을 수 있음 (소켓을 멀티스레드로 처리하면 1(Server):N(Client)의 연결도 됨)

 

-주고받기

sock.resv() : 소켓으로 부터 데이터를 읽을 때

>> 데이터를 읽어드릴 떄  버퍼의 크기를 전달 sock.recv(bufsize)는 최대 bufsize 바이트만큼의 데이터 읽어옴

ex) sock.recv(1024) 1024byte 만큼 데이터를 읽어옴

sock.sendall() : 소켓으로 부터 정보를 보낼 때
>> 보낼때도 똑같음
>>> 문자열을 주고받고 싶으면 인코딩/디코딩을 해서 주고받아야 함

 

- 닫기

: sock.close()

 

 

[[[[ Client ]]]]
: 서버랑 거의 비슷함, 한가지 다른 점은 바인드나 리스닝의 과정이 필요 없음
>> 클라이언트는 능동적으로 서버에 연결함

 

 

 

- 참고링크

soooprmx.com/archives/8737