最近一直在忙,今天正好抽空来总结下最近忙的东西。
文件传输:c/s模式。这样摆在眼前的第一个问题就是 网络编程 , 这里,C#的网络编程,推荐去张子阳的博文学习学习,大牛写的,就是流弊。但是,最近他的博文网站上不去了,大家可以去找找其他人转载张子阳的博文。这里丢一个连接:http://download.csdn.net/detail/pemwoo/4934863, 转载博客:http://www.xuebuyuan.com/295625.html
不废话了, 进入正题。
1、 文件传输,服务器与客户端就要使用同一套协议。协议包括了传输消息的格式,还有关于消息的编码与解码。这个相当重要呢。
2、在传输数据的过程中,发送方发出去的数据类型是什么,接收方就要使用相同的数据类型的缓冲区去接收。(我就是因为这个,调试老半天了)。比如, 发送方某次发送数据类型为 long, 接收方却用 int 去接收,接收方只能接收前4个字节, 还有4个字节的数据在网络上。
下面是关键部分代码:
服务器:
///---请求客户端文件(可执行文件)
public void SendVersionContextToClient()
{
try
{
///---发送消息格式为:文件名长度 、 文件名、内容长度、文件内容
///------1、发送文件名长度
string filenName = "1.rar";
byte[] fileNameLen = BitConverter.GetBytes(filenName.Length);
lock (ClientNetworkStream)
{
ClientNetworkStream.Write(fileNameLen, 0, fileNameLen.Length);
ClientNetworkStream.Flush();
}
///-----2、发送文件名
byte[] byteFileName = Encoding.Default.GetBytes(filenName);//Encoding.Unicode.GetBytes(filenName);
lock (ClientNetworkStream)