大家好我想问一个关于使用套接字进行文件传输的问题。连接后我创建了客户端服务器代码我在客户端打开文件并开始读取数据并将数据发送到服务器。服务器打开一个文件,从套接字读取该数据并将其写入文件。它工作正常但现在我希望我的文件名在两边都应该相同。为了实现这一点,我已经将文件名从客户端发送到服务器,但问题是服务器读取文件名并读取一些数据并生成错误的文件名。
例如
file name: myfile.txt
data in the file is : hello how are you.
server create the file name myfile.txthellow how
我怎么能避免这种情况,因为我不知道服务器大小的文件名是多少 感谢
答案 0 :(得分:1)
您必须将文件名的长度发送到服务器。有两种方法可以做到这一点:
另外,请注意单个recv
调用可能会读取另一侧多个send
发送的数据:这就是TCP的工作方式(TCP是面向流的协议):不要假设在一个send
命令中发送的数据将在一个recv
中到达。一个recv
可以从一个或多个send
命令获取数据,并且可以在单个send
命令中接收来自一个或多个recv
命令的数据。 (而且你也可能得到“半个send
”。
答案 1 :(得分:0)
有几种选择:
NUL
或\n
)。在接收端,文件名和数据都将作为单个字节流到达。但是,服务器现在有足够的信息来确定文件名的结束位置和数据的开始位置。
答案 2 :(得分:0)
您可以使用两种类型的消息定义自定义协议:一种类型用于文件名,另一种用于数据。每条消息由第一个字节组成,表示其类型(标题),其余字节包含文件名或数据(正文)。