C#winform (TCP)socket异步是不能不能实现多个文件的同时接受
本人菜鸟一只,学习学习想做个简单的传输文件的系统,用异步(Tcp)Socket实现了一个文件的接收,然后想着再这基础上改改,实现多个文件的同时接收,结果就遇到问题了。如果把接收缓冲区定义成局部变量,那收到的数据就不能当参数传进自己写的接收文件的函数中,如果定义成全局的,那就不能同时接受多个文件了。。。纠结中,各位大吓们给点意见吧
------解决方案--------------------并发····
------解决方案--------------------那全局数组呢?
------解决方案--------------------
不知道你是怎样写的。
简单说一下基本的数据结构。比如说你可以定义一个客户端“会话”类型,例如
public class Session
{
public Rfc2898DeriveBytes Aes;
public Stream Stream;
public TcpClient Client; //或者 public Socket Client;
public byte[] Buffer = new byte[1024 * 1024];
public List<byte> Cache = new List<byte>(); // 读取到消息结束标志之前累计读取到的字节
public UserPassport passport; //用户登录信息
public DateTime Timeout = DateTime.UtcNow.AddMinutes(2); //心跳过期时间
}
然后,你的所谓“异步调用”,可以将此类型的对象作为异步调用的方法参数传送,在回调方法中则功过 AsyncState 属性取回。
面向对象最基本的一个东西就是封装。你要的领域概念自己不会封装,而只会找最浅的、别人给你定义的对象来用,那么自然就不会设计程序。
------解决方案--------------------只纠结于一个 byte[] 是局部还是全局变量,这种设计会害了你的。你这个问题很有普遍性,基本上都是没有见过真正的程序。
这就好像一个学吃饭的小孩子放不下奶嘴,你的学习过程还没有真正开始。如果你是从网上个别文章、某个培训班的视频上学习这个编程,可以停止了。需要找真正的、稍微专业的一些软件设计和通讯程序的基础课本来学习,而不再是那种糊弄急于找工作的人的钱的培训“范例”。