글

라벨이 socket인 게시물 표시

python socket select timeout example

본 포스트는 python socket에서 리눅스의 select와 동일한 기능을 하는 select 모듈 사용 예제를 싣고 있다. 이전 포스트에서 non-blocking socket 프로그래밍에 대해 알아봤었다. 아래 링크의 포스트에서 만들어진 예제에 'select' 모듈을 추가해 예제 코드를 만들었다. python socket API 와 non-blocking socket server client example code 1. python socket select timeout example 이전 포스트의 클라이언트 코드에서 select를 사용하지 않은 코드는 아래와 같다. import socket import time def recv(sock,size,timeout_ms):     while timeout_ms > 0:         try:             data = sock.recv(size)             if data is not None:                 return data.decode()         except BlockingIOError:             timeout_ms -= 1             time.sleep(0.001)              return None 위 코드를 수정해 select를 사용하면 아래와 같이 구현...

python asyncio를 이용한 async socket server client example code

 본 포스트는 python asyncio 라이브러리를 사용한 async socket 서버와 클라이언트 예제 코드를 싣고 있다. 이전 non-blocking socket의 예제를 asyncio 라이브러리에 맞게 변형하였다.  python socket API 와 non-blocking socket server client example code 1. asyncio (Asynchronous I/O) asyncio는 async/await 구문을 사용해 multi-thread처럼 동시에 진행하는 코드를 작성하는 라이브러리다. 네트워크 및 웹 서버, DB 연결, 분산 작업 대기열을 제공하는 분산 프레임 워크의 기반으로 사용된다고 한다. (  https://docs.python.org/3.7/library/asyncio.html ) async socket server/client 구현에 필요한 asyncio 라이브러리 API는 예제 코드를 보면서, 설명하도록 하겠다. 2. Async socket client example code import asyncio async def pingpong_client():     try:         reader, writer = await asyncio.open_connection(host='localhost',port=8000)     except OSError:         print('connection fail')         return          for _ in range(10):         writer.write(b'ping')     ...

python socket API 와 non-blocking socket server client example code

 본 포스트는 기본적인 python socket API를 살펴본 후 이 API들을 사용하여 non-blocking socket 설정 방법 및 서버 클라이언트 예제 코드를 싣고 있다. socket APIs 소켓 라이브러리는 아래와 같이 불러올 수 있다. import socket  예제 코드에서 사용된 socket의 API는 다음과 같다. socket 생성 및 연결 socket.socket(family=AF_INET, type=SOCK_STREAM, proto=0, fileno=None) 소켓을 생성 한다. family   - AF_INET, AF_INET6, AF_UNIX, AF_CAN, AF_PACKET, or AF_RDS. type  - SOCK_STREAM, SOCK_DGRAM, SOCK_RAW proto  - family가 AF_CAN인 경우 CAN_RAW,CAN_BCM, CAN_ISOTP fileno   - 지정된 경우 파일 디스크립터로부터 자동으로 socket의 family, type, proto 값을 결정한다. socket.bind(address) 소켓에 주소를 바인딩한다. socket.listen([backlog]) 서버 소켓에서 클라이언트의 연결을 기다린다. backlog은 허용되지 않는 연결 수를 지정한다. 만약 지정하지 않으면, 자동으로 적당한 값이 지정된다. socket.accept() 클라이언트의 연결을 받아들인다. 연결된 socket와 주소를 반환한다.  socket.connect(address) 주어진 주소로 연결을 시도한다. address는 (host,port)로 지정한다. socket mode socket.setblocking(flag) 소켓을 blocking 또는 non-blocking 모드로 설정한다. flag가 Fa...