我尝试键入单个程序(客户端)和(多客户端服务器)来发送和接收文件 传输完全成功,但程序(无响应)传输数据并在完成时返回正常
您可以使用链接下载项目: http://www.mediafire.com/?81gs1zqbsgqldwb
请在程序传输数据时帮我解决(无响应)???
发送机制:
byte[] buffer = new byte[packetSize];
while (sum < length)
{
if (length - sum > packetSize)
{
count = fileStream.Read(buffer, 0, packetSize);
Send(socket_File, buffer);
}
else
{
buffer = new byte[length - sum];
count = fileStream.Read(buffer, 0, length - sum);
Send(socket_File, buffer);
}
sum = sum + count;
}
fileStream.Close();
接收机制:
string path = Save_File.FileName;
FileInfo fi = new FileInfo(path);
FileStream fs = fi.OpenWrite();
byte[] buffer = new byte[packetSize];
while (sum < File_Size)
{
if (File_Size - sum > packetSize)
{
count = Socket_File_Client.Receive(buffer, 0, packetSize, 0);
fs.Write(buffer, 0, count);
}
else
{
buffer = new byte[File_Size - sum];
count = Socket_File_Client.Receive(buffer, 0, File_Size - sum, 0);
fs.Write(buffer, 0, count);
}
sum = sum + count;
}
fs.Close();
答案 0 :(得分:4)
代码中的常规IO阻塞。这意味着执行代码的线程必须等到传输完成。如果此线程是程序中的主线程,那么它将导致程序无法响应用户输入(“无响应”),直到完成。
有两种方法可以在阻止IO时使程序响应:
我认为第二种选择在你的情况下可能更容易。
只需使用ThreadPool.QueueUserWorkItem或BackgroundWorker即可。有关说明和详细信息,请参阅this article。