0

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

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

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

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

现在我的问题是文件,

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

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

4

2 回答 2

0

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

于 2014-04-22T19:56:09.210 回答
0

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

于 2012-07-13T12:37:54.993 回答