Python 은 socket 을 사용 하여 멀티캐스트 와 바 이 너 리 데 이 터 를 보 냅 니 다.
3518 단어 Python그룹 방송바 이 너 리 데이터 보 내기
점대 점 연결 은 많은 통신 수 요 를 처리 할 수 있 지만 직접 연결 수가 증가 함 에 따라 여러 통신 자 간 에 같은 소식 을 전달 하 는 것 이 점점 어려워 질 것 이다.
각 수신 자 에 게 단독으로 메 시 지 를 보 내 는 것 은 추가 적 인 처리 시간 과 대역 폭 을 소모 할 수 있 습 니 다.이것 은 스 트림 영상 이나 오디 오 작업 을 완성 하 는 응용 에 있어 코드 에 현저 한 성능 문제 가 발생 할 수 있 습 니 다.
한편,멀티캐스트(multicast)를 사용 하여 여러 노드 에 동시에 메 시 지 를 보 내 면 더욱 효율 적 인 효 과 를 얻 을 수 있다.왜냐하면 네트워크 인 프 라 시설 은 패 킷 이 모든 수신 자 에 게 전송 되 는 것 을 확보 할 수 있 기 때문이다.
멀티캐스트 메 시 지 는 항상 UDP 로 보 냅 니 다.TCP 는 한 쌍 의 통신 시스템 을 제공 해 야 하기 때 문 입 니 다.멀티캐스트 의 주 소 는 멀티캐스트 팀 이 라 고 불 린 다.이것 은 일반적인 IPv 4 주소 범위 의 키 집합(224.0.0.0~23.255.255.255)으로 앵 커 통신 을 위 한 예약 이다.
이 주 소 는 네트워크 공유 기와 교환기 에 의 해 특수 하 게 처리 되 기 때문에 그룹 에 보 낸 메 시 지 는 인터넷 에서 이 그룹 에 가입 한 모든 수신 자 에 게 배 포 될 수 있다.
주의해 야 할 것 은 대부분의 위탁 관리 공유 기와 교환기 가 기본적으로 멀티캐스트 통신 을 금지 한 다 는 점 이다.후속 실행 프로그램 에 문제 가 있 으 면 네트워크 설정 을 확인 할 수 있 습 니 다.
그룹 방송 소식 을 발송 하 다.
얼마나 많은 응답 을 받 을 지 알 수 없 기 때문에 소켓 에 시간 초과 값 을 사용 하여 대답 을 기다 릴 때 무한 정 차단 되 지 않도록 해 야 합 니 다.
TTL(Time-To-Live value)은 생존 시간 값 으로 얼마나 많은 네트워크 가 이 패 킷 을 받 아들 이 는 지 제어 합 니 다.IP 사용MULTICAST_TTL 옵션 과 setsockopt()함수 로 TTL 을 설정 합 니 다.기본 값 1 은 공유 기 가 현재 네트워크 밖으로 패 킷 을 전송 하지 않 음 을 나타 낸다.TTL 의 최대 수 치 는 255 이 며,포장 은 1 바이트 로 해 야 한다.
예제 코드 는 다음 과 같다.
import socket
import struct
# 1.
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
multicast_group = ('224.3.29.71', 10000)
sock.settimeout(10)
ttl = struct.pack('b', 1)# 10 struct
sock.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_TTL, ttl)
try:
msg = " , ".encode('UTF-8')
sent = sock.sendto(msg, multicast_group)
while True:
try:
data, server = sock.recvfrom(1024)
except socket.timeout:
print('time out')
break
else:
print(data, server)
finally:
sock.close()
이 코드 는 sock.setsockopt()호출 을 제외 하고 UDP 와 유사 합 니 다.그룹 방송 소식 을 접수 하 다.
멀티캐스트 수신 자 를 만 드 는 첫 단 계 는 UDP 소켓 을 만 드 는 것 이다.일반적인 소켓 을 만 들 고 포트 에 연결 한 후 setsockopt()를 사용 하여 IP 를 변경 할 수 있 습 니 다.ADD_MEMBERSHIP 옵션,안동 그룹 추가.
이 옵션 값 은 그룹 방송 주소 의 8 바이트 포장 표시 이 며,뒤쪽 은 서버 감청 통신 흐름 의 네트워크 인터페이스 이 며,IP 주소 로 표 시 됩 니 다.여기,수신 자 는 INADDR 을 사용 합 니 다.ANY 가 모든 인 터 페 이 스 를 감청 합 니 다.
예제 코드 는 다음 과 같다.
import socket
import struct
multicast_group = '224.3.29.71'
server_address = ('', 10000)
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.bind(server_address)
group = socket.inet_aton(multicast_group)
mreq = struct.pack('4sL', group, socket.INADDR_ANY)
sock.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq)
while True:
data, address = sock.recvfrom(1024)
print(data.decode('UTF-8'), address)
sock.sendto(' '.encode('UTF-8'), address)
수신 자의 순환 은 UDP 서버 와 유사 합 니 다.실행 후 효 과 는 다음 과 같 습 니 다.
파 이 썬 이 socket 을 사용 하여 멀티캐스트 와 바 이 너 리 데 이 터 를 보 내 는 것 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 파 이 썬 멀티캐스트 와 바 이 너 리 데 이 터 를 보 내 는 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 저 를 많이 사랑 해 주세요!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Python의 None과 NULL의 차이점 상세 정보그래서 대상 = 속성 + 방법 (사실 방법도 하나의 속성, 데이터 속성과 구별되는 호출 가능한 속성 같은 속성과 방법을 가진 대상을 클래스, 즉 Classl로 분류할 수 있다.클래스는 하나의 청사진과 같아서 하나의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.