|
제가 아는 부분만 말씀 드려 보겠습니다.참고만 하시고요.
저두 바이너리의 개념이 정확하지가 않네요.
일단 FileRead(iFileHandle, fileDataBuf, 4096);
에서 4096 의 사이즈로 읽어오셨다면 바이너리 형식으로 하신거라도 생각됩니다.
바이너리와 텍스트,스트링의 차이가 제 생각으로는
스트링은 '\0' null 을 만나면 끝을 알리는것이고 텍스트의경우는 '1a' (정확치않음,화일의 끝을 알려주는 문자) 를 만나면 종료 하게 되어 있습니다.
이와 달리 바이너리형식은 그런 규칙을 안 따르므로 사이즈를 정해 주어야 하는걸로 알고 있습니다.
그러므로 님의 경우 이미 바이너리로 전송수신을 하고 있는데...
그 와중에 바이너리 데이터를 스트링 데이터(null을 만나면 종료하는) 로
취급하는 함수를 사용하시는건 아닌지 살펴보시기 바랍니다.
사족으로 strcpy 함수를 보면 사이즈가 없죠?
반면에 strncpy 는 사이즈가 있습니다.이런 차이로 오류가 생긴건 아닌지...
young 님이 쓰신 글 :
: 네..다시 자세하게 말씀드릴게여..
: 음..그러니깐여..
: 채팅 프로그램인데 파일 전송 기능에서
: 4kb씩 읽어서 전송을 하는데여...
:
: char fileDataBuf[4096] = {0};
:
: iFileLength = FileSeek(iFileHandle,0,2);
:
: FileSeek(iFileHandle,0,0);
:
: iBytesRead = FileRead(iFileHandle, fileDataBuf, 4096);
:
: send(m_Socket, fileDataBuf, strlen(fileDataBuf), 0);
:
: FileRead 는 파일을 읽을때 바이너리 모드로 읽는 옵션이 없더라구여..
: 그래서 워드 파일 같은 경우 그냥 읽어서 상대편에 전송을 하면 제대로 전송이 안되고 깨지고 그래서
: 위에서 읽어 들인 데이터를 바이너리로 변환을 해서 전송을 하려고 하거든여..
:
: iBytesRead = FileRead(iFileHandle, fileDataBuf, 4096);
:
: <fileDataBuf를 바이너리로 변환 후>
:
: //전송
: send(m_Socket, fileDataBuf, strlen(fileDataBuf), 0);
:
: 이런식으로여...
: 그래서 바이너리로 변환이 필요한테 어떻게 하는지 잘 모르겠어여..
: 아무리 찾아봐도 보이지 않네여...
:
: 근데 이렇게 하면 워드 파일 같은 경우 제대로 전송이 되나여?
: FileRead에서 바이너리 파일을 어떻게 읽고 쓰죠?
:
:
:
:
: 금목암 님이 쓰신 글 :
: : 파일을 만약 unsigned char나 char로 읽어들이셨으면 해당 버퍼에 문자의 hex값이
: : 있습니다 문제는 intel hex파일이면 해석해야하고 그냥이면 해석할 필요없습니다
: :
: : 보낼때 한자씩 띄어서 보내면 되죠 ..
: : 좀더 자세히 원하는걸 써보세요 그래야 방법도 나오죠
|