2012-03-08 91 views
0

当客户端请求时,我需要通过套接字连接发送一个txt文件。问题是我无法计算如何从二进制格式转换为ASCII。使用此代码,客户端只能接收垃圾字符。通过套接字C++流式传输.txt

ifstream file; 
char output [logfilesize]; 

file.open("log.txt"); 

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

file.close 

对不起,如果问题已被多次询问,但在阅读所有文章后,我无法确定如何使其工作。

谢谢!


编辑:工作代码!

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 2012-03-08 10:14:13

+0

我将新代码添加到了我的第一篇文章中。 – 01BTC10 2012-03-08 10:15:13

+0

@ user38586,很难说不知道客户端代码是什么样的。 – Nim 2012-03-08 11:11:48