【问题标题】:client server sockets and file transfer客户端服务器套接字和文件传输
【发布时间】:2012-07-13 05:24:12
【问题描述】:

我有一个客户端服务器应用程序, 我的服务器接受来自多个客户端的连接。

客户端连接到服务器后,它向服务器发送命令,服务器发送回复 回复是字符串或文件。

在接受连接后的服务器端, 有一个套接字(与监听套接字分开)负责与客户端通信。

在客户端向服务器发送命令后,我开始在同一个套接字上读取响应。

现在我的问题在于文件,

客户端向服务器发送请求文件的命令,服务器通过发送文件的二进制数据开始响应,如果文件一切正常,则传输正常, 但是,如果在文件传输过程中服务器端出现读取问题,则无法将该问题传递给客户端,因为这是一对一的套接字通信......客户端会将任何传入数据视为如果是文件数据,直到开始发送的文件大小不完整。,

我确定这可能是一个反复出现的模式,我该如何解决这个问题?

【问题讨论】:

    标签: sockets


    【解决方案1】:

    只要这些是 TCP/IP 套接字,您所需要的只是服务器和客户端之间的协议,前八个字节(例如)send() 和 recv() 分别表示二进制数据跟随。 TCP/IP 将确保所有文件都到达并为您安排妥当。如果您有多种文件可以传输,那么您同意下一个之后的四个字节表示文件类型的字符。所以你基本上保持recv()直到你有12个字节,这可能只需要一个recv()。然后继续使用 recv() 直到你得到你期望接收的所有字节。

    【讨论】:

      【解决方案2】:

      FTP 通过两个连接来做到这一点:一个命令连接和一个数据连接。

      【讨论】:

      • 并且数据连接已关闭,数据已完成,因此对于每个命令(用于文件传输),它都会创建数据套接字、连接、传输和断开连接。这让我很担心,它不会影响性能
      • @Ahmed 它在转移期间摊销。传输时间越长,影响越小。我所做的 FTP 传输是兆字节:7 个额外的数据包是微不足道的。
      猜你喜欢
      • 2012-06-30
      • 2012-12-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-10
      • 1970-01-01
      • 2013-11-11
      • 1970-01-01
      相关资源
      最近更新 更多