WEB开发网
开发学院软件开发C语言 C#网络编程(订立协议和发送文件) - Part.4 阅读

C#网络编程(订立协议和发送文件) - Part.4

 2009-03-26 08:22:21 来源:WEB开发网   
核心提示: 接下来我们来看下这段代码,有这么两点需要注意一下:在Main()方法中可以看到,C#网络编程(订立协议和发送文件) - Part.4(8),图片的位置为应用程序所在的目录,如果你跟我一样处于调试模式,我记得这样一句话:当你觉得类中的方法与类的名称不符的时候,那么就应该考虑重新创建一个类,那

接下来我们来看下这段代码,有这么两点需要注意一下:

在Main()方法中可以看到,图片的位置为应用程序所在的目录,如果你跟我一样处于调试模式,那么就在解决方案的Bin目录下的Debug目录中放置三张图片Client01.jpg、Client02.jpg、Client03.jpg,用来发往服务端。

我在客户端提供了两个SendFile()方法,和一个BeginSendFile()方法,分别用于同步和异步传输,其中私有的SendFile()方法只是一个辅助方法。实际上对于发送文件这样的操作我们几乎总是需要使用异步操作。

SendMessage()方法中给streamToServer加锁很重要,因为SendFile()方法是多线程访问的,而在SendFile()方法中又调用了SendMessage()方法。

我另外编写了一个SendStatus类,它用来记录和打印发送完成的状态,已经发送了多少字节,完成度是百分之多少,等等。本来这个类的内容我是直接写入在Client类中的,后来我觉得它执行的工作已经不属于Client本身所应该执行的领域之内了,我记得这样一句话:当你觉得类中的方法与类的名称不符的时候,那么就应该考虑重新创建一个类。我觉得用在这里非常恰当。

下面是SendStatus的内容:

// 即时计算发送文件的状态
public class SendStatus {
    private FileInfo info;
    private long fileBytes;

    public SendStatus(string filePath) {
        info = new FileInfo(filePath);
        fileBytes = info.Length;
    }

    public void PrintStatus(int sent) {
        string percent = GetPercent(sent);
        Console.WriteLine("Sending {0} bytes, {1}% ...", sent, percent);
    }

    // 获得文件发送的百分比
    public string GetPercent(int sent){    

        decimal allBytes = Convert.ToDecimal(fileBytes);
        decimal currentSent = Convert.ToDecimal(sent);

        decimal percent = (currentSent / allBytes) * 100;
        percent = Math.Round(percent, 1);   //保留一位小数
       
        if (percent.ToString() == "100.0")
            return "100";
        else
            return percent.ToString();
    }
}

上一页  3 4 5 6 7 8 9  下一页

Tags:网络编程 订立 协议

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接