我正在编写服务器 - 客户端应用程序,我在发送文件时遇到问题;有时转移是正确完成的,但很多时候#34;似乎"就像服务器(接收器)接收更少的字节并继续等待其他数据,而客户端已经完成发送所有文件。
这是发件人:
public void sendFile(String path) {
FileInfo fi = new FileInfo(path);
long fileDim = fi.Length;
//Console.ReadLine();
writer.WriteLine(Convert.ToString(fileDim));
socket.SendFile(path);
}
这是接收者:
public bool receiveFile(String path) {
byte[] recievedData = new byte[1024];
int bytesRead;
long fileDim = Convert.ToInt64(reader.ReadLine());
if (!Directory.Exists(Path.GetDirectoryName(path)))
Directory.CreateDirectory(Path.GetDirectoryName(path));
BinaryWriter bw = new BinaryWriter(File.Open(path, FileMode.Append));
try {
while (fileDim > 0) {
bytesRead = socket.Receive(recievedData, recievedData.Length, SocketFlags.None);
bw.Write(recievedData, 0, bytesRead);
fileDim -= bytesRead;
}
}
finally {
bw.Close();
}
}
如果我取消注释" Console.ReadLine"在发送者身上(所以我在发送文件之前停止它几秒钟)一切正常。 所以看起来如果发送者太快,一些数据会丢失,但我知道这在TCP流中是不可能的......(为什么会发生这种情况?)
请提前帮助我