0

我尝试键入具有(客户端)和(多客户端服务器)的单个程序来发送和接收文件 传输完全成功,但程序(无响应)传输数据并在完成后正常返回

您可以通过以下链接下载项目: 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();
4

1 回答 1

4

代码中的常规 IO 阻塞。这意味着正在执行您的代码的线程将不得不等到传输完成。如果此线程是您程序中的主线程,那么它将导致您的程序在完成之前对用户输入无响应(“无响应”)。

在阻塞 IO 时,您有两种方法可以使程序响应:

  • 使用异步 IO
  • 在另一个线程中运行您的传输

我认为在您的情况下,第二种选择可能更容易。

只需使用 ThreadPool.QueueUserWorkItem 或 BackgroundWorker。有关解释和详细信息,请参阅本文。

于 2012-08-10T23:39:39.957 回答