如何在 Winsock 中发送文件(http 方式)

Posted

技术标签:

【中文标题】如何在 Winsock 中发送文件(http 方式)【英文标题】:How To Send A File In Winsock (http Way) 【发布时间】:2012-03-12 11:03:08 【问题描述】:

我的意思是,如果我在窗口环境中有一个 winsock,并且我将它设置为侦听端口 80 和服务器的 ip。那么我有一个文件 abc.txt 或 abc.xml。我必须将文件从客户端发送到 http 服务器通过http链接。我们如何发送它。我不知道如何发送文本文件。

拜托……我需要这个……非常需要。

提前致谢!

【问题讨论】:

当你收到文件请求时,只需读取它并通过套接字发送。 异步还是同步? 使用 jQuery 异步上传文件。 ***.com/questions/166221/… 你真正想做的是什么? a) 创建一个服务器程序来接收文件,b) 创建一个将文件发送到服务器的客户端程序,c) 使用现有程序(例如 Web 浏览器)将文件发送到 http 服务器,或 d) 其他? 实际上我必须在http服务器上发送,在客户端我可以使用fread()读取文件,并在winsock的send()中使用相应的缓冲区来发送到特定的http url,但我没有'不知道服务器只提供了http链接。服务器做什么,即它如何接收文件。可以通过使用发送功能去服务器。如何创建用于从客户端接收文件的 http url(使用 vs 2008 窗口环境) 【参考方案1】:

设置服务器基本上需要以下步骤:

    socket() 打开套接字 使用 bind() 将套接字绑定到地址(通常为 INADDR_ANY)和特定端口 使用 listen() 监听套接字 使用 accept() 接受连接。这将返回一个新的套接字号(客户端套接字) 现在您可以使用 recv() 从客户端套接字接收数据,并使用 send() 发送数据。

要将文件发送到客户端,只需逐行读取文件,然后使用 send() 将其发送到套接字。

当然,您需要在开始发送之前传达文件名和大小。 (或在文件末尾使用 EOF 字符)。

有关详细信息,请参阅: msdn: Getting Started with Winsock

【讨论】:

实际上我已经按照相同的步骤完成了此操作,但在这种情况下,服务器应始终在客户端和服务器每次都必须监听客户端之前执行。我必须通过 http 发送文件,这是我们必须创建了接收文件的服务器的http url,并将该url提供给客户端以发送文件。但我不知道如何创建http服务器以及如何通过http发送。我的任务是服务器向客户端提供 http url,客户端通过 http 发送文件。帮助我。 很难理解您的语言。但是,正如我在回答中解释的那样,创建了一个服务器。正常的方式是服务器一直在运行,然后客户端可以随时连接到它。如果你需要一个 http 服务器,你必须在此之上实现 http 协议。应该不会太难。 http 命令是纯 ascii 文本。 嗨 paulil 我把这项工作搁置了,所以我确实看到了你的评论。任务是客户端有一个 http url 链接,当客户端想要将文件传输到服务器时,它只需跟随(连接)通过此文件连接到服务器的 http url 链接将被传输。实际上服务器提供了 http url 链接,但它是怎么做的呢?服务器如何生成http url?当它提供 http 链接时,文件是如何传输到服务器的?

以上是关于如何在 Winsock 中发送文件(http 方式)的主要内容,如果未能解决你的问题,请参考以下文章

在 C++ 中的 Winsock 中发送 HTTP GET 请求后,Recv() 函数挂起

VB6:如何获取通过 winsock 发送的字节数?

如何使用http和winsock加载网页?

用winsock发送位图

如何使用 C++ 在 Winsock 中将大字符串从客户端发送到服务器

Python Winsock - 如何通过已经处于活动状态的 Winsock 连接发送数据