Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
unixc++;简单的服务器问题:将数据发送回浏览器 我创建了一个简单的UNIX服务器,用C++编写,只等待传入的连接,然后当建立连接时,它将请求的数据发送回客户端的浏览器进行显示。除了向客户发送数据外,我的一切都正常工作。这就是它的工作原理:_C++_Unix_File_Connection - Fatal编程技术网

unixc++;简单的服务器问题:将数据发送回浏览器 我创建了一个简单的UNIX服务器,用C++编写,只等待传入的连接,然后当建立连接时,它将请求的数据发送回客户端的浏览器进行显示。除了向客户发送数据外,我的一切都正常工作。这就是它的工作原理:

unixc++;简单的服务器问题:将数据发送回浏览器 我创建了一个简单的UNIX服务器,用C++编写,只等待传入的连接,然后当建立连接时,它将请求的数据发送回客户端的浏览器进行显示。除了向客户发送数据外,我的一切都正常工作。这就是它的工作原理:,c++,unix,file,connection,C++,Unix,File,Connection,我启动服务器并设置端口号(在本例中,我将使用8181) 客户端打开浏览器并连接到位于的“我的服务器”,并尝试检索test.txt以供查看 服务器接受传入连接。它检查文件是否存在。如果文件存在,它会将文件发送到浏览器进行查看 我的问题是,我不确定如何将数据发送回浏览器进行查看。我正在尝试使用Unix系统调用来实现这一点,因为我相信这就是获取数据所需要的全部 现在我要做的就是将()从文件读入一个char数组缓冲区,然后将其输入write(socketID,buffer,strlen(buffer))

我启动服务器并设置端口号(在本例中,我将使用8181)

  • 客户端打开浏览器并连接到位于的“我的服务器”,并尝试检索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
    
    //创建并绑定套接字。调用listen()。。。
    conn_socket=accept(socketInt,(struct sockaddr*)和caddr,(socklen_t*)和caddrLength);
    recvInt=recv(conn_套接字,requestedFileBuffer,1023,0);
    如果(recvInt>0){
    //检查请求的文件是否存在并正确
    //将该文件读入字符数组“buffer”
    int writeInt=write(recvInt,buffer,strlen(buffer));//这不起作用
    当你说:

    int writeInt = write(recvInt, buffer, strlen(buffer));
    

    write()的第一个参数应该是要写入的套接字-您正在向它传递recv()返回的字符数除了尼尔的正确答案之外,你还可以考虑使用,而不是在你的平台上可用,因为它提供了比你所采用的方法更有效的发送文件的方式。
    如果
    sendfile()
    可能仅在大文件的情况下提供增益。一如既往,对代码进行基准测试,看看是否值得使用。

    您是否阅读过Beej的网络编程指南?