【问题标题】:Transfer file with socket but program (not responding) when transfer data c#传输数据时使用套接字传输文件但程序(不响应)c#
【发布时间】:2012-08-10 23:33:13
【问题描述】:

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

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

【问题讨论】:

标签: c# file sockets transfer


【解决方案1】:

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

您有两种方法可以让您的程序在阻塞 IO 时做出响应:

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

我认为第二个选项在你的情况下可能更容易。

只需使用 ThreadPool.QueueUserWorkItem 或 BackgroundWorker。有关说明和详细信息,请参阅this article

【讨论】:

  • 感谢您描述我的问题 :) 我会尝试您的解决方案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-05-16
  • 1970-01-01
  • 2011-09-22
  • 2015-03-06
  • 1970-01-01
  • 2014-10-18
相关资源
最近更新 更多