[완료]리눅스, 윈도우 소켓 통신에 문제점?
글쓴이: anaud2 / 작성시간: 금, 2008/06/06 - 7:39오후
안녕하세요
리눅스 서버와 윈도우소켓 간에 간단한 메세지를 주고 받으려 합니다.전송과 수신을 함수로 만들었는데요
우선 사전에 몇바이트의 메세지를 보낼지를 먼저 보내고 받을때 역시 그걸 받고 그정도 바이트가 들어올때까지 while()문으로 대기를 하게 합니다..
그냥 메세지를 char[]을 보내고 그냥 받아서 화면에 출력할땐 아무 문제가 안생겨서 전 우선 보내는 전송 바이트를 int에서 char[]로 변환해서 4바이트를 보냈었습니다 받는 쪽에서는 그걸 다시 int로 변환해서 그숫자만큼의 바이트가 들어올때까지 수신 대기를 하게..이렇게 하니까 일반적인 메세지 전송이 원활히 이루어 지더라구요
그래서 이걸 가지고 암호화 통신을 위해 블록암호화로 메세지를 암호화 해서 보내니까 이상하게 그걸 받아서 복호화에 에러가 되더라구요
제생각에는 전송되는게 일반 char[] 화면에 찍어줄때는 정상인식이 되지만 char[]이 정상적이진 않다는 생각이 들거든요
잘은 모르지만 빅인디언 리틀인디언 문제도 있을수 있다고 하고...
제가 필요한 부분은 int 와 char[]이 정상적으로 손실없이 전송되려면 어떻게 해야하나요?
Forums:
.
소켓 통신을 하는데 OS 차이는 상관 없습니다.
단지 CPU 종류에 따라 빅엔디안/리틀엔디안 의 문제만 있습니다.
short 나 int 형 처럼 복수개 바이트가 모여 하나의 값을 이루는 경우
htons, htonl 등으로 변환해서 전송해야 하며
ntohs, nthhl 등으로 전송받은 데이터를 변환 후 사용해야 합니다.
이런 변환 함수의 사용은 무조건 하시면 CPU 종류에 따라 알아서 처리됩니다.
댓글 달기