读取图像文件C++并将其放在插座上
我正在尝试用 C++ 开发一个小型 Web 服务器,但是当我尝试读取图像文件并将其写入套接字缓冲区时遇到问题。 我发现一个用 C 编写的类似函数可以完美运行,我无法理解为什么我的方法不起作用,当我通过浏览器连接到服务器并打开一个图像文件时,我得到了这个输出。
“无法显示图像“http://127.0.0.1:7777/myimage.jpg”,因为它包含错误。”
这是我的方法:
std::string
Client::getFileContent(const std::string& name)
{
std::ifstream f; f.open(name.c_str(), std::ios::binary);
if( !f.is_open() ) {
return (std::string(""));
} else {
f.seekg(0, std::ios::end);
unsigned int length = f.tellg();
f.seekg(0, std::ios::beg);
char* buffer = new char[length];
f.read(buffer, length);
f.close();
return ( std::string(buffer) );
}
}
然后我将其写入套接字缓冲区(使用 nspr 套接字):
void
Socket::send(const std::string& s)
{
if(PR_Send(sock, s.c_str(), s.length(), 0, PR_INTERVAL_NO_WAIT) == -1) {
throw ( Exception::Exception(Exception::Exception::SOCKET_SEND) );
}
}
这是我在网络上找到的函数,我无法理解为什么它可以完美地工作而我的却不起作用 Oo:
while ( (ret = read(file_fd, buffer, BUFSIZE)) > 0 ) {
(void)write(fd,buffer,ret);
非常感谢: )
i'm trying to develop a little web server in C++ but i have a problem when i try to read an image file and write it in a socket buffer.
I found a similar function written in C that works perfectly, i cannot understand why my method doesn't work, when i connect to the server by browser and open an image file i got this output.
"The image "http://127.0.0.1:7777/myimage.jpg" cannot be displayed because it contains errors."
This is my method:
std::string
Client::getFileContent(const std::string& name)
{
std::ifstream f; f.open(name.c_str(), std::ios::binary);
if( !f.is_open() ) {
return (std::string(""));
} else {
f.seekg(0, std::ios::end);
unsigned int length = f.tellg();
f.seekg(0, std::ios::beg);
char* buffer = new char[length];
f.read(buffer, length);
f.close();
return ( std::string(buffer) );
}
}
And then i write it in a socket buffer(use nspr socket):
void
Socket::send(const std::string& s)
{
if(PR_Send(sock, s.c_str(), s.length(), 0, PR_INTERVAL_NO_WAIT) == -1) {
throw ( Exception::Exception(Exception::Exception::SOCKET_SEND) );
}
}
And this is the function i found on web, i cannot understand why this works perfectly and mine doesn't work O.o:
while ( (ret = read(file_fd, buffer, BUFSIZE)) > 0 ) {
(void)write(fd,buffer,ret);
Thank you very much :)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您的问题就在这里:
从
char *
创建字符串将在第一个 0 字节处停止,而图像可能包含很多字节。返回一个vector
,而不是返回字符串You problem is here:
Creating a string from a
char *
will stop at the first 0 byte, while an image may contain a lot. instead of returning a string, return avector<char>
like