【c#源码】安卓客户端通过TCP通信与Windows服务器进行文件传输
2015-03-12 09:56
726 查看
NetworkComms网络通信框架序言
APK文件 (对应的windows服务器端已经架设好,可以直接下载进行测试)
源码 数据库文件
在前面一篇文章:【源码】c#编写的安卓客户端与Windows服务器程序进行网络通信 中我们探讨了,如何通过xamarin技术,完成安卓客户端与Windows服务器的通信,这篇文章,我们探讨一下使用场景非常多的文件传输.
先谈一下为什么使用xamarin.android技术吧,之前有开发过一个公文系统,c#语言开发,服务器部署在Windows Server 2003上,客户端采用Winform技术(.net2.0),使用了一段时间后,客户提出希望系统能够支持安卓移动端。首先想到了用java语言进行开发,用java写安卓程序应该是最好不过了,但是难点出现了,就是如何让java编写的安卓客户端与现有的Windows服务器上的程序通信,探索多日无果,于是想起了xamarin.adnroid技术,使用此技术,可以集成原有的C#通信框架,TCP通信这一块就解决了.这样做还有一个好处,即能够与原有的服务器端程序无缝集成,服务器端程序同时支持Windows客户端与安卓客户端。
学习Xamarin.Android的时间不长,水平有限,希望本文能够抛砖引玉,对xamarin开发有经验的朋友请多多指点,不足之处敬请批评指正。
本Demo效果图如下
![](http://images.cnitblog.com/blog2015/586310/201503/040659143498851.jpg)
当用户点击“从服务器获取文件”按钮后,服务器端会收到相应的请求,并开始通过TCP连接发送数据,本例中,服务器发送一张图片(大小为20k),客户端收到后,新建一个名称为"msdc"的文件夹,并把文件存储在此文件夹中。`
我们来看一下开发过程:
第一步:在Main.axml文件中,增加一个按钮
第二步:
客户端的MainActivity.cs文件中,编写该按钮相对应的方法
![](http://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
GetFileSavePath
![](http://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
checkSDCard
检查是否存在SD卡
第三步:看一下服务器端的处理程序
![](http://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
SendFile方法
第四步:客户端接收服务器发来的文件
![](http://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
IncomingPartialFileData
![](http://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
IncomingPartialFileDataInfo
MainActivity.cs中添加相应的字典变量
![](http://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
ReceivedFile
第五步:另外在Mobile.Entity类库中还添加了一个SendInfo方法,用于服务器发送文件给客户端是,传递文件相关信息
![](http://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
SendInfo
感谢大家关注
APK文件 (对应的windows服务器端已经架设好,可以直接下载进行测试)
源码 数据库文件
在前面一篇文章:【源码】c#编写的安卓客户端与Windows服务器程序进行网络通信 中我们探讨了,如何通过xamarin技术,完成安卓客户端与Windows服务器的通信,这篇文章,我们探讨一下使用场景非常多的文件传输.
先谈一下为什么使用xamarin.android技术吧,之前有开发过一个公文系统,c#语言开发,服务器部署在Windows Server 2003上,客户端采用Winform技术(.net2.0),使用了一段时间后,客户提出希望系统能够支持安卓移动端。首先想到了用java语言进行开发,用java写安卓程序应该是最好不过了,但是难点出现了,就是如何让java编写的安卓客户端与现有的Windows服务器上的程序通信,探索多日无果,于是想起了xamarin.adnroid技术,使用此技术,可以集成原有的C#通信框架,TCP通信这一块就解决了.这样做还有一个好处,即能够与原有的服务器端程序无缝集成,服务器端程序同时支持Windows客户端与安卓客户端。
学习Xamarin.Android的时间不长,水平有限,希望本文能够抛砖引玉,对xamarin开发有经验的朋友请多多指点,不足之处敬请批评指正。
本Demo效果图如下
![](http://images.cnitblog.com/blog2015/586310/201503/040659143498851.jpg)
当用户点击“从服务器获取文件”按钮后,服务器端会收到相应的请求,并开始通过TCP连接发送数据,本例中,服务器发送一张图片(大小为20k),客户端收到后,新建一个名称为"msdc"的文件夹,并把文件存储在此文件夹中。`
我们来看一下开发过程:
第一步:在Main.axml文件中,增加一个按钮
<Button android:id="@+id/btnGetFile" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="从服务器获取文件" />
第二步:
客户端的MainActivity.cs文件中,编写该按钮相对应的方法
Button buttonGetFile = FindViewById<Button>(Resource.Id.btnGetFile); buttonGetFile.Click += new EventHandler(buttonGetFile_Click);
void buttonGetFile_Click(object sender, EventArgs e) { GetFileFromServer(); }
public void GetFileFromServer() { //传递的参数为本地保存的路径 string filePath = GetFileSavePath(this); //发送一个请求给服务器,服务器收到该请求后,开始发送文件 newTcpConnection.SendObject ("GetFileFromServer", filePath); }
![](http://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
GetFileSavePath
![](http://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
checkSDCard
检查是否存在SD卡
第三步:看一下服务器端的处理程序
NetworkComms.AppendGlobalIncomingPacketHandler<string>("GetFileFromServer", IncomingReqMobileUpFile);
private void IncomingReqMobileUpFile(PacketHeader header, Connection connection, string filePath) { //在此Demo中,我们直接指定一个文件,进行发送 string filename = AppDomain.CurrentDomain.BaseDirectory + "Files\\" + "msdc.jpg"; string fileID = FileIDCreator.GetNextFileID(NetworkComms.NetworkIdentifier.ToString()); SendFile sendFile = new SendFile(fileID, filename, filePath, connection, customOptions ); sendFile.NowSendFile(); }
![](http://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
SendFile方法
第四步:客户端接收服务器发来的文件
//处理文件数据 <2> NetworkComms.AppendGlobalIncomingPacketHandler<byte[]>("PartialFileData", IncomingPartialFileData); //处理文件信息 <3> NetworkComms.AppendGlobalIncomingPacketHandler<SendInfo>("PartialFileDataInfo", IncomingPartialFileDataInfo);
![](http://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
IncomingPartialFileData
![](http://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
IncomingPartialFileDataInfo
MainActivity.cs中添加相应的字典变量
//接收文件字典 Dictionary<string, ReceivedFile> receivedFiles = new Dictionary<string, ReceivedFile>(); /// <summary> /// Incoming partial data cache. Keys are ConnectionInfo, PacketSequenceNumber. Value is partial packet data. /// </summary> Dictionary<ConnectionInfo, Dictionary<long, byte[]>> incomingDataCache = new Dictionary<ConnectionInfo, Dictionary<long, byte[]>>(); /// <summary> /// Incoming sendInfo cache. Keys are ConnectionInfo, PacketSequenceNumber. Value is sendInfo. /// </summary> Dictionary<ConnectionInfo, Dictionary<long, SendInfo>> incomingDataInfoCache = new Dictionary<ConnectionInfo, Dictionary<long, SendInfo>>();
![](http://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
ReceivedFile
第五步:另外在Mobile.Entity类库中还添加了一个SendInfo方法,用于服务器发送文件给客户端是,传递文件相关信息
![](http://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
SendInfo
感谢大家关注
相关文章推荐
- 【源码】c#编写的安卓客户端与Windows服务器程序进行网络通信
- 【源码】c#编写的安卓客户端与Windows服务器程序进行网络通信
- 【源码】c#编写的安卓客户端与Windows服务器程序进行网络通信
- 【源码】c#编写的安卓客户端与Windows服务器程序进行网络通信
- 【源码】c#编写的安卓客户端与Windows服务器程序进行网络通信
- 【源码】c#编写的安卓客户端与Windows服务器程序进行网络通信
- 【源码】c#编写的安卓客户端与Windows服务器程序进行网络通信
- [c#源码分享]客户端程序通过TCP通信传送"小文件"到服务器
- 【c#源码】基于TCP通信的客户端断线重连
- 【c#源码】基于TCP通信的客户端断线重连
- 【c#源码】基于TCP通信的客户端断线重连
- 客户端与服务器之间分别通过TCP和UDP进行通信
- TCP通信的服务器(两个客户端通过服务器进行数据中转)
- C#基于TCP&UDP实现服务器与多个客户端之间的通信(客户端之间直接通信,不靠服务器端转发消息)
- [C语言]一个很实用的服务端和客户端进行TCP通信的实例
- socket通信 UDP文件传输(多客户端)——附源码
- C#Tcp多个客户端与服务器数据与文件传输
- C# Socket TCP简单例子(服务器与客户端通信)
- android开发步步为营之6:客户端通过tcp和服务端进行交互
- C#使用命名管道通过网络在进程之间进行通信