Python 은 socket 을 사용 하여 멀티캐스트 와 바 이 너 리 데 이 터 를 보 냅 니 다.

뭐 공부 해요?
점대 점 연결 은 많은 통신 수 요 를 처리 할 수 있 지만 직접 연결 수가 증가 함 에 따라 여러 통신 자 간 에 같은 소식 을 전달 하 는 것 이 점점 어려워 질 것 이다.
각 수신 자 에 게 단독으로 메 시 지 를 보 내 는 것 은 추가 적 인 처리 시간 과 대역 폭 을 소모 할 수 있 습 니 다.이것 은 스 트림 영상 이나 오디 오 작업 을 완성 하 는 응용 에 있어 코드 에 현저 한 성능 문제 가 발생 할 수 있 습 니 다.
한편,멀티캐스트(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 을 사용 하여 멀티캐스트 와 바 이 너 리 데 이 터 를 보 내 는 것 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 파 이 썬 멀티캐스트 와 바 이 너 리 데 이 터 를 보 내 는 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 저 를 많이 사랑 해 주세요!

좋은 웹페이지 즐겨찾기