我正在创建一个用C++编写的简单的Unix服务器,它只是等待传入的连接,然后在建立连接时,它将请求的数据发送回客户端的浏览器进行显示.除了将数据发送到客户端之外,我一切正常.这是它应该如何工作:
我启动服务器并设置端口号(对于这个例子,我将使用8181).
客户端打开浏览器并连接到位于http://server.mysite.com:8181/test.txt的服务器,并尝试检索test.txt以供查看.
服务器接受传入连接.它会检查文件是否存在.如果文件存在,它会将文件发送到浏览器进行查看.
我的问题是我不知道如何将数据发送回浏览器进行查看.我正在尝试使用Unix系统调用来完成这项工作,因为我相信所有这些都是为了获取数据所需要的.
现在我正在做的就是从文件中读取()到一个char数组缓冲区,然后将其输入到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
Run Code Online (Sandbox Code Playgroud)
有人有什么建议吗?如果您需要我发布更多代码,我很乐意这样做,但我相信问题在于上面的代码.
谢谢你的时间.
小智 6
当你说:
int writeInt = write(recvInt, buffer, strlen(buffer));
Run Code Online (Sandbox Code Playgroud)
write()的第一个参数应该是要写入的套接字 - 你传递的是recv()返回的字符数
归档时间: |
|
查看次数: |
373 次 |
最近记录: |