【发布时间】:2010-12-23 09:43:29
【问题描述】:
我正在创建一个用 C++ 编写的简单 Unix 服务器,它只是等待传入的连接,然后在建立连接时,它将请求的数据发送回客户端的浏览器以进行显示。除了向客户端发送数据外,我一切正常。它应该是这样工作的:
我启动服务器并设置端口号(在本例中我将使用 8181)。
客户端打开浏览器并连接到我位于http://server.mysite.com:8181/test.txt 的服务器并尝试检索 test.txt 以供查看。
服务器接受传入连接。它检查文件是否存在。如果文件存在,则将文件发送到浏览器进行查看。
我的问题是我不确定如何将数据发送回浏览器进行查看。我正在尝试使用 Unix 系统调用来完成这项工作,因为我相信这就是取回数据所需要的全部内容。
现在我所做的只是从文件中读取()到一个字符数组缓冲区,然后将其输入到 write(socketID, buffer, strlen(buffer)) 命令中。当我测试它时,服务器正确找到文件并将数据读入char数组缓冲区,但是write()命令每次都返回-1错误值。
我想把它放到浏览器连接的地方,然后能够在浏览器中查看 text.txt 以及浏览器支持的图片格式。
有没有办法解决“读入缓冲区,然后将该缓冲区写入套接字”部分并以某种方式将文件直接发送到浏览器?这是我现在正在使用的代码的一部分。我只是在代码的其他部分进行了注释。
//create and bind socket. call listen()...
conn_socket = accept(socketInt, (struct sockaddr *)&caddr, (socklen_t *) &caddrLength);
recvInt = recv(conn_socket, requestedFileBuffer, 1023, 0);
if(recvInt > 0){
//checks to see that the requestd file exists and correctly
//reads that file into char array "buffer"
int writeInt = write(recvInt, buffer, strlen(buffer));//This is not working
cout << "writeInt is: " << writeInt << endl;// returns -1
}//end if
有人有什么建议吗?如果您需要我发布更多代码,我很乐意这样做,但我相信问题出在上面的代码中。
感谢您的宝贵时间。
【问题讨论】:
-
你读过 Beej 的网络编程指南吗? beej.us/guide/bgnet
标签: c++ unix file connection