2012-03-08 3 views
0

클라이언트가 요청할 때 소켓 연결을 통해 txt 파일을 보내야합니다. 문제는 이진 형식을 ASCII로 변환하는 방법을 생각할 수 없다는 것입니다. 이 코드를 사용하면 클라이언트는 정크 문자 만 수신합니다.소켓을 통해 .txt 스트리밍 C++

ifstream file; 
char output [logfilesize]; 

file.open("log.txt"); 

file >> output; 
send(socket, output, sizeof(output), 0); 
cout << output << endl; 

file.close 

죄송합니다. 질문을 여러 번 물어 보았지만 모든 게시물을 읽은 후에는 어떻게 작동하는지 파악할 수 없었습니다.

감사합니다.


편집 : Working code!

int lenght; 
char * logf; 
ifstream file; 

file.open("log.txt"); 
file.seekg(0, ios::end); 
lenght = file.tellg(); 
file.seekg(0, ios::beg); 
logf = new char [lenght]; 
file.read(logf, lenght); 
file.close(); 

cout.write (logf, lenght); 
send(soc,logf , lenght, 0); 
delete[] logf; 

답변

2

sizeof(output) 당신이 아니라 당신이 스트림 연산자를 통해 읽을 문자의 수보다 선언 원래 배열의 크기를 반환합니다. 파일이 텍스트 (즉, 구분 된 단일 문자열을 읽으려는 경우) 인 경우 파일 스트림에서 연산자로 스트림을 사용할 수 있습니다. 그렇지 않으면 read() 호출을 통해 스트림에서 필요한 바이트 수를 읽어야합니다. 문자열 인 경우 strlen() 함수를 사용하여 문자열의 길이를 확인하십시오 (참고 : 이진 데이터에는 사용할 수 없습니다).

+0

매우 유용한 답변을 제공해 주셔서 감사합니다. 불행히도 send() 문제는 여전히 남아 있습니다. 클라이언트는 문서의 첫 번째 문자 만 받고 있습니다. – 01BTC10

+0

첫 번째 게시물에 새 코드를 추가했습니다. – 01BTC10

+0

@ user38586, 클라이언트 코드가 무엇인지 알지 못해도 알기가 어렵습니다. – Nim

관련 문제