소켓통신에서 패킷형태로 전송과 일반 전송의 차이가 궁금합니다
C#과 파이썬간에 소켓통신으로 여러 개의 데이터를 송수신하려는데
메시지를 직렬화해서 패킷형태로 전송하더라구요
일반전송보다 더 좋거나 해야하는 이유가 있나요??
그리고 패킷형태로 송수신 코딩을 시작하려면 어떤 식으로 접근해야할까요...?
너무 어렵게 생각하지 마시구요
소켓통신을 일반전화기가 아닌 무전기라고 생각해주세요
일반전화기는 동시에 통화가 되죠? 이건 동기식방식
무전기는 한번에 한쪽에서만 말할수 있는데 이건 비동기방식이라고 합니다
보통 프로그램들은 특별한것이 아니라면 비동기방식을 사용하게 되는데요
하드웨어적 통신프로토콜을 저레벨 수준까지 배우면 나중에 도움이 되나,
프로그래밍만 하신다면 그 수준까지 파실건 없고
소켓이 연결된후 어떤 자료를 어떻게 보내야 하는지 최적의 설정을 해주셔야 합니다
즉, 보내는 컴퓨터의 성능뿐만 아니라 받는 컴퓨터의 성능도 고려해야 한다는것이죠
그래서 무조건 1회 송신시 전체를 보내는 방법도 있지만 잘라서 보내야 하는 경우도 생깁니다
( TCP , UDP 방식도 있지만 보통 TCP 사용합니다 )
근데 이런 방식을 설계하기 위해서는 어떤 메세지 또는 데이타를 보낼것이냐가 중요하겠죠
핸드쉐이크 설계도 어케 할지도 결정해야 하구요
단순채팅이라면? 별생각없이 1024바이트 이내를 1번의 송신으로 묶어서 보내시면 되지만
파일이라면? 마찬가지로 1024바이트로 쪼개서 보낼지 한번에 쭈우우욱~~~ 보낼지 결정해야 할겁니다
최악의 경우 수신측의 컴퓨터 성능과 인터넷연결상태가 엄청나게 낮아서
송신측은 1초에 100만개 글자를 보낼수 있다면? 수신측은 1초에 10개 글자만 받을수 있기때문입니다
그래서 핸드쉐이크가 필요한겁니다
100개글자 송신후에 저쪽에서 100개글자 다 받았어요 라는 ok 메세지 보내길 기다렸다가
받으면 다시 100개 전송.. 이런 핸드쉐이크가 필요하다는거죠
일단 시도해보세요, 코딩 시도하면서 얻게 되는 실패확율은 엄청나게 많을겁니다
하지만 그 경험 하나하나가 전부 버릴게 없다는걸 미리 말씀드립니다
실패는 성공의 어머니입니다^^