使用C ++中的TCP将文件从服务器端发送到客户端

时间:2011-05-04 20:02:19

标签: c++ sockets network-programming

现在这是一个请求,因为我无法找到 任何简单直接的例子。

问题:我想从服务器端向客户端发送文件。

当服务器已经启动并侦听端口并且客户端请求文件时(文件的名称被接受为具有服务器IP地址的参数,例如127.0.0.1和端口号) 然后转移过程开始,直到文件被复制。

也有人可以合并我如何测量服务器端的平均传输速度?

BTW:我正在运行Linux x86 干杯, echo9

3 个答案:

答案 0 :(得分:4)

检查 Beej's Guide to Network Programming 。这里有很多例子展示了如何使用套接字实现客户端/服务器架构并在它们之间发送数据。

修改

检查this tutorial中的项目8和9,以获取客户端/服务器上的完整示例。请注意,在第8项上,服务器向客户端发送char*

send(fd2,"Welcome to my server.\n",22,0); /* send to the client welcome message */

在这种情况下,它是"Welcome to my server.\n"字符串,下一个参数是您要发送的字符串的大小。

当您需要从文件发送数据时,它是一回事:首先,您需要从文件中读取数据并将其存储在通过 malloc()<手动分配的char* buffer;中/ em>的。

这样的事情:

char* buffer;
buffer = (char*) malloc(1024); // let's say your file has 1KB of data

/* insert here the code to read data from the file and populate buffer with it */

send(fd2, buffer, 1024,0);

答案 1 :(得分:2)

这是一个简单的协议:

CLIENT                   SERVER
                         socket(), bind(), listen()
socket(), connect()
                         accept()
send("GET filename\n")
                         recv(buffer)
                         inspect buffer, parse filename (stop at space or \n),
                         open() file.
                         sendfile(file, socket)
                         close(socket)
                         close(file)
 recv(socket)
 close()

此协议的优点是能够将您的Web浏览器用作客户端,并将您的Web服务器用作主机,假设它们各自支持HTTP/0.9

Here's a client

答案 2 :(得分:0)

您可能需要考虑使用sendfile(2)