신입들이 가끔 TCP/IP 방식으로 장치들 간 통신을 구현할 때,
데이터가 아주 엉망진창일 때가 있다며 울상을 지을 때가 왕왕 있다.
그 원인 중 하나는 네트워크 바이트 오더가 달라서 발생하는 것으로,
파이썬의 socket 모듈로 네트워크 바이트 오더를 확인해보자...
import socket
def check_network_byte_order():
# Create a socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# Get the byte order of the system
byte_order = s.getsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST)
# Check if the system uses big-endian or little-endian
if byte_order == 0:
print("System uses little-endian (network byte order)")
else:
print("System uses big-endian")
# Close the socket
s.close()
# Call the function to check the network byte order
check_network_byte_order()
import socket: socket 모듈을 불러오기
def check_network_byte_order()
check_network_byte_order라는 함수를 정의. 이 함수는 시스템의 네트워크 바이트 순서를 확인하는 역할을 합니다.
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
- 소켓 생성. AF_INET은 IPv4 주소 체계를 사용하고, SOCK_STREAM은 TCP 소켓을 생성하도록 지정합니다.
byte_order = s.getsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST)
- getsockopt 함수를 사용하여 시스템의 바이트 순서를 가져옵니다. SO_BROADCAST는 브로드캐스트 소켓 옵션을 나타냅니다.
if byte_order == 0
시스템이 리틀 엔디안인지 빅엔디안인지 확인합니다. byte_order 값이 0이면 리틀 엔디안을 사용하고, 그렇지 않으면 빅엔디안을 사용합니다.
print("System uses little-endian (network byte order)")
시스템이 리틀 엔디안을 사용한다면 해당 메시지를 출력합니다.
else
그렇지 않은 경우 (시스템이 빅엔디안을 사용하는 경우) 다음 라인을 실행합니다.
print("System uses big-endian"): 시스템이 빅엔디안을 사용한다면 해당 메시지를 출력합니다.
s.close(): 소켓을 닫습니다.
check_network_byte_order(): 함수를 호출하여 네트워크 바이트 순서를 확인합니다.
'IT·컴퓨터' 카테고리의 다른 글
초등학생도 이해할 수 있는 CUDA core vs Tensor core (1) | 2024.04.18 |
---|---|
가비아 2차 도메인 애드센스 Ads.txt 상태 : 찾을 수 없음 해결 방법 (1) | 2024.04.12 |
vcpkg란 무엇인가(매니페스트 모드/일반모드) (1) | 2024.04.03 |
C++ Vector<> / begin() 구문 기초 (0) | 2024.04.02 |
[펌] 네, 정말 C는 C++보다 빠릅니다. (1) | 2024.04.02 |