如何通过Web Services上传和下载文件
随着Internet技术的发展和跨平台需求的日益增加 Web Services的应用越来越广 我们不但需要通过Web Services传递字符串信息 而且需要传递二进制文件信息 下面 我们就分别介绍如何通过Web Services从服务器下载文件到客户端和从客户端通过Web Services上载文件到服务器
一 通过Web Services显示和下载文件
我们这里建立的Web Services的名称为GetBinaryFile 提供两个公共方法 分别是GetImage()和GetImageType() 前者返回二进制文件字节数组 后者返回文件类型 其中 GetImage()方法有一个参数 用来在客户端选择要显示或下载的文件名字 这里我们所显示和下载的文件可以不在虚拟目录下 采用这个方法的好处是 可以根据权限对文件进行显示和下载控制 从下面的方法我们可以看出 实际的文件位置并没有在虚拟目录下 因此可以更好地对文件进行权限控制 这在对安全性有比较高的情况下特别有用 这个功能在以前的ASP程序中可以用Stream对象实现 为了方便读者进行测试 这里列出了全部的源代码 并在源代码里进行介绍和注释
首先 建立GetBinaryFile a x文件
我们可以在VS NET里新建一个C#的aspxWebCS工程 然后 添加新项 选择 Web服务 并设定文件名为 GetBinaryFile a x 在 查看代码 中输入以下代码 即 GetBinaryFile a x cs
using System;
using System Collections;
using System ComponentModel;
using System Data;
using System Diagnostics;
using System Web;
using System Web UI;
using System Web Services;
using System IO;
namespace aspxWebCS
{
///
/// GetBinaryFile 的摘要说明
/// Web Services名称 GetBinaryFile
/// 功能 返回服务器上的一个文件对象的二进制字节数组
///
[WebService(Namespace=
Description= 在Web Services里利用 NET框架进行传递二进制文件 )]
public class GetBinaryFile : System Web Services WebService
{
#region Component Designer generated code
//Web 服务设计器所必需的
private IContainer ponents = null;
///
/// 清理所有正在使用的资源
///
protected override void Dispose( bool disposing )
{
if(disposing &&ponents != null)
{
ponents Dispose();
}
base Dispose(disposing);
}
#endregion
public class Images: System Web Services WebService
{
///
/// Web 服务提供的方法 返回给定文件的字节数组
///
[WebMethod(Description= Web 服务提供的方法 返回给定文件的字节数组 )]
public byte[] GetImage(string requestFileName)
{
///得到服务器端的一个
///如果你自己测试 注意修改下面的实际物理路径
if(requestFileName == null || requestFileName == )
return getBinaryFile( D:\Picture JPG );
else
return getBinaryFile( D:\ + requestFileName);
}
///
/// getBinaryFile 返回所给文件路径的字节数组
///
///
public byte[] getBinaryFile(string filename)
{
if(File Exists(filename))
{
try
{
///打开现有文件以进行读取
FileStream s = File OpenRead(filename);
return ConvertStreamToByteBuffer(s);
}
catch(Exception e)
{
return new byte[ ];
}
}
else
{
return new byte[ ];
}
}
///
/// ConvertStreamToByteBuffer 把给定的文件流转换为二进制字节数组
///
///
public byte[] ConvertStreamToByteBuffer(System IO Stream theStream)
{
int b ;
System IO MemoryStream tempStream = new System IO MemoryStream();
while((b =theStream ReadByte())!= )
{
tempStream WriteByte(((byte)b ));
}
return tempStream ToArray();
}
[WebMethod(Description= Web 服务提供的方法 返回给定文件类型 )]
public string GetImageType()
{
///这里只是测试 您可以根据实际的文件类型进行动态输出
return image/jpg ;
}
}
}
}
观看地址 进入讨论组讨论
一旦我们创建了上面的a x文件 进行编译后 我们就可以编写客户端的代码来进行调用这个Web Services了
我们先 添加Web引用 输入 下面 我们编写显示文件的中间文件 GetBinaryFileShow aspx 这里 我们只需要在后代码里编写代码即可 GetBinaryFileShow aspx cs文件内容如下
using System;
using System Collections;
using System ComponentModel;
using System Data;
using System Drawing;
using System Web;
using System Web SessionState;
using System Web UI;
using System Web UI WebControls;
using System Web UI HtmlControls;
using System Web Services;
namespace aspxWebCS
{
///
/// GetBinaryFileShow 的摘要说明
///
public class GetBinaryFileShow : System Web UI Page
{
private void Page_Load(object sender System EventArgs e)
{
// 在此处放置用户代码以初始化页面
///定义并初始化文件对象
aspxWebCS GetBinaryFile Images oImage;
oImage = new aspxWebCS GetBinaryFile Images();
///得到二进制文件字节数组
byte[] image = oImage GetImage( );
///转换为支持存储区为内存的流
System IO MemoryStream memStream = new System IO MemoryStream(image);
///定义并实例化Bitmap对象
Bitmap bm = new Bitmap(memStream);
///根据不同的条件进行输出或者下载
Response Clear();
///如果请求字符串指定下载 就下载该文件
///否则 就显示在浏览器中
if(Request QueryString[ Download ]== )
{
Response Buffer = true;
Response ContentType = application/octet stream ;
///这里下载输出的文件名字 ok jpg 为例子 你实际中可以根据情况动态决定
Response AddHeader( Content Disposition attachment;filename=ok jpg );
}
else
Response ContentType = oImage GetImageType();
Response BinaryWrite(image);
Response End();
}
#region Web Form Designer generated code
override protected void OnInit(EventArgs e)
{
//
// CODEGEN 该调用是 ASP NEeb 窗体设计器所必需的
//
InitializeComponent();
base OnInit(e);
}
///
/// 设计器支持所需的方法 不要使用代码编辑器修改
/// 此方法的内容
///
private void InitializeComponent()
{
this Load += new System EventHandler(this Page_Load);
}
#endregion
}
}
最后 我们就编写最终的浏览页面 GetBinaryFile aspx 这个文件很简单 只需要aspx文件即可 内容如下
<%@ Page language="c#" Codebehind="GetBinaryFileaspxcs" AutoEventWireup="false"
Inherits="aspxWebCSGetBinaryFile" %> Inherits= aspxWebCS GetBinaryFile %>
runat= server > runat= server >下载文件
收藏地址:进入讨论组讨论
using System;
using System Collections;
using System ComponentModel;
using System Data;
using System Diagnostics;
using System Web;
using System Web Services;
using System IO;
namespace aspxWebCS
{
///
/// Upload 的摘要说明
///
[WebService(Namespace=
Description= 在Web Services里利用 NET框架进上载文件 )]
public class Upload : System Web Services WebService
{
public Upload()
{
//CODEGEN 该调用是 ASP NEeb 服务设计器所必需的
InitializeComponent();
}
#region Component Designer generated code
//Web 服务设计器所必需的
private IContainer ponents = null;
///
/// 设计器支持所需的方法 不要使用代码编辑器修改
/// 此方法的内容
///
private void InitializeComponent()
{
}
///
/// 清理所有正在使用的资源
///
protected override void Dispose( bool disposing )
{
if(disposing &&ponents != null)
{
ponents Dispose();
}
base Dispose(disposing);
}
#endregion
[WebMethod(Description= Web 服务提供的方法 返回是否文件上载成功与否 )]
public string UploadFile(byte[] fs string FileName)
{
try
{
///定义并实例化一个内存流 以存放提交上来的字节数组
MemoryStream m = new MemoryStream(fs);
///定义实际文件对象 保存上载的文件
FileStream f = new FileStream(Server MapPath( ) + \
+ FileName FileMode Create);
///把内内存里的数据写入物理文件
m WriteTo(f);
m Close();
f Close();
f = null;
m = null;
return 文件已经上传成功 ;
}
catch(Exception ex)
{
return ex Message;
}
}
}
}
using System;
using System Collections;
using System ComponentModel;
using System Data;
using System Drawing;
using System Web;
using System Web SessionState;
using System Web UI;
using System Web UI WebControls;
using System Web UI HtmlControls;
using System Web Services;
using System IO;
namespace aspxWebCS
{
///
/// Upload 的摘要说明
/// 利用该方法通过Web Services上载文件
///
public class Upload : System Web UI Page
{
protected System Web UI HtmlControls HtmlInputFile MyFile;
protected System Web UI WebControls Button Button ;
private void Page_Load(object sender System EventArgs e)
{
// 在此处放置用户代码以初始化页面
}
#region Web Form Designer generated code
override protected void OnInit(EventArgs e)
{
//
// CODEGEN 该调用是 ASP NEeb 窗体设计器所必需的
//
InitializeComponent();
base OnInit(e);
}
///
/// 设计器支持所需的方法 不要使用代码编辑器修改
/// 此方法的内容
///
private void InitializeComponent()
{
this Button Click += new System EventHandler(this Button _Click);
this Load += new System EventHandler(this Page_Load);
}
#endregion
private void Button _Click(object sender System EventArgs e)
{
///首先得到上载文件信息和文件流
if(MyFile PostedFile != null)
{
System Web HttpFileCollection oFiles;
oFiles = System Web HttpContext Current Request Files;
if(oFiles Count < )
{
Response Write ( 请选择文件 );
Response End();
}
string FilePath = oFiles[ ] FileName;
if(FilePath == || FilePath == null)
{
Response Write ( 请选择一个文件 );
Response End();
}
string FileName = FilePath Substring(FilePath LastIndexOf( \ )+ );
try
{
///处理上载的文件流信息
byte[] b = new byte[oFiles[ ] ContentLength];
System IO Stream fs;
aspxWebCS Upload o;
o = new aspxWebCS Upload();
fs = (System IO Stream)oFiles[ ] InputStream;
fs Read(b oFiles[ ] ContentLength);
///调用Web Services的UploadFile方法进行上载文件
Response Write(o UploadFile(b FileName));
fs Close();
}
catch(Exception ex)
{
Response Write(ex Message);
}
}
else
{
Response Write( 请选择文件 );
}
}
}
}
最后 需要注意的是 在保存文件时 您应该确保指定文件的完整路径(例如 C:MyFilesPicture jpg ) 并确保为 ASP NET使用的帐户提供要存储文件的目录的写权限 上载大文件时 可使用 元素的 maxRequestLength 属性来增加文件大小的最大允许值 其中 maxRequestLength 指示 ASP NET 支持的HTTP方式上载的最大字节数 该限制可用于防止因用户将大量文件传递到该服务器而导致的拒绝服务攻击 指定的大小以 KB 为单位 默认值为 KB ( MB) executionTimeout 指示在被 ASP NET 自动关闭前 允许执行请求的最大秒数 在当文件超出指定的大小时 如果浏览器中会产生 DNS错误或者出现服务不可得到的情况 也请修改以上的配置 把配置数加大
另外 上载大文件时 还可能会收到以下错误信息
aspnet_wp exe (PID: ) 被回收 因为内存消耗超过了 MB(可用 RAM 的百分之 )
如果遇到此错误信息 请增加应用程序的 nfig 文件的 元素中 memoryLimit 属性的值
lishixinzhi/Article/program/net/201311/12410
1、在Java项目中发布一个WebService服务,与Web服务相关的类,都位于Javaxjws包中。
@WebService 此注解用在类上指定将此类发布成一个WebService;
EndPoint 此类为端点服务类,其中publish()方法用于将一个已经添加了@WebService注解对象绑定到一个地址的端口上,用于发布。
2、发布WebService服务,HelloWebServicejava文件代码如下:
<span style="font-family:KaiTi_GB2312;font-size:18px;">package cntgbws;importjavaxjwsWebMethod;
importjavaxjwsWebService;
importjavaxxmlwsEndpoint;
/
@WebService - 它是一个注解,用在类上指定将此类发布成一个ws
Endpoint – 此类为端点服务类,它的方法publish用于将一个已经添加了@WebService注解对象绑定到一个地址的端口上。
@author xuemin
/
@WebService
public classHelloWebService {
publicString HelloWord(String name){
return"Hello: "+name;
}
/
添加exclude=true后,HelloWord2()方法不会被发布
@param name
@return
/
@WebMethod(exclude=true)
publicString HelloWord2(String name){
return"Hello: "+name;
}
publicstatic void main(String[] args) {
/
参数1:服务的发布地址
参数2:服务的实现者
/
Endpointpublish("服务发布地址",new HelloWebService());
}
}
</span>
注:@WebService 它是一个注解,用在类上指定将此类发布成一个ws,Endpoint 此类为端点服务类,它的方法publish用于将一个已经添加了@WebService注解对象绑定到一个地址的端口上。运行以上程序即可进行WebService发布。
1、需求
从个人需求和角度出发,自己想要一个什么东西,获取别人也有类似的困惑和想法。
经常在网上看小说,有时候会觉得广告太多,运行太慢。无聊的时候看新闻,也会觉得不是很感兴趣的东西也会搜索到。于是想到了自己或许可以写个小程序,放一些自己感兴趣的东西。
总结下来,自己想要的东西无非就是两个:
1)、把自己感兴趣的书管理起来
2)、把感兴趣的新闻组管理起来
有时候,会觉得很简单,可是自己也是经历和很久,才知道自己到底想要什么。
2、计划
计划总是理想的东西,也算是目标,没有计划可能动力就会少很多。只有合理的计划,合理的目标才能一鼓作气完成。若是不切实际,不考虑自身条件和资源特质,想做一个好的东西,结果也只能像打水漂,一个个的飘过去,最后沉入水底。
不过我们都是人在职场,身不由己,不可能有完整的时间让你做自己的事情。
因此,自己使用了迭代的方法,不至于感觉到自己的想法太过渺茫。
1)、制定一个简单的框架
2)、建立后台查询webservice接口,能够查询数据列表,和文件位置。
3)、实现小文本书籍程序(一个唐诗三百首的简单程序)
4)、实现大文本书籍阅读(四大名著翻阅)
5)、实现新闻组阅读
6)、对几个小程序进行集成。
7)、后台使用sqlite数据库,支持基本数据存储。前台使用sqlite实现数据缓存支持离线阅读。
每一步都需要都需要在尽可能集中的时间尽快完成,不然就可能被打断。
3、构架
所谓麻雀虽小,五脏俱全,即便它很小,该有的总还是要有,只不过是缩减版。
做这个小程序,需要申请一个云服务器,最简单的那种,1元/天,作为学习和实验已经够用。不过所有的东西都要省着用,计算资源,网络资源依然是个负担,能不用尽量不用。有点像大城市的房子,如果只有巴掌大的地方,那么每个地方都要省着用。
如果从较大的视野看,这个程序算起来也实在是小,无外乎就是租用一个外部服务器,然后做一个webservice服务,然后在app上把数据展示出来。没有负载均衡,没有用大型数据库,没有文件服务器,没有复杂的业务逻辑,甚至也不敢采用未知的技术,然而就是这么说起来的一点点东西,那么实现其中的那么一点点,也是不容易的事情。
若是一定要说说框架,那就是:
软件采用webservice+app的结构,服务器采用spring+cxf通用构架,app采用mvp通用框架。
硬件从同单服务器+android设备
数据采用文件服务器+sqlite+数据缓存。
4、技术
受限于资源,不可能把程序做的很大,所用的技术也不用最新,深度难度深度不大,所求的不过是一个完整可用的程序。
这个程序没有使用H5,没有使用JNI,仅仅使用java去完成服务端和客户端的整个程序。
这个过程中依然遇到了一些通用的技术,比如:
服务器的搭建,tomcat的安装部署,spring+cxf服务搭建,日志部署,mybatis+sqlite的使用,json对象转换,MyBatisGeneratorTool表映射,数据查询,文本文件压缩加密分割等。
App框架选用,restful接口访问,分辨率自适应,程序升级,版本管理,阅读翻页,数据缓存,标签处理,greendao数据映射,数据列表拖动,以及各种各样的界面问题。
只要程序向前走总会遇到各种问题,而且一旦程序规模达到一定程序,那就不能随意的更改,只能是更加小心,实现备份,并且先进性适当的规划和预研才可以动手。
5、过程
软件开发的过程总是反反复复,想做的,设计的,实际完成的总会有很多的出入。今天想到的,明天可能有不同,实际做的时候,又发现因为其他的原因导致需要变通的去做。
从资源,时间和精力来说,在没有外力的情况下,一个人想把东西做好,可能性很小,那就存在适度的问题,到底做到何种程度才算结束,才算是一个里程碑。
我想基本上够用即可,不需要太多的功能,灵活的技巧,炫目的界面,自我认为可以了就结束了,毕竟这不是一个商业软件。
程序做到一定时间,或者环境和心理发生,或许暂时不适合继续做下去了,适当停一停。
预先想的索引,分类,黑夜模式,订阅处理,html缓存和截取,界面优化,添加评论,添加注解,更多配置,自定义添加文章,自定义插件,安全加固等等,都是没有做的。
添加webservice的引用,并发布到服务器上步骤:
1选择文件->新建->项目。
2在项目中选择控制台应用程序,将项目名称重新命名为WebServiceTest。
3点击项目右键,选择添加->服务引用。
4在地址栏中输入WebServie链接地址后回车,然后重新命名服务名称为ServiceGetWeather,点击确定后在代码中就可以看到添加的服务应用了。
5然后在代码中添加如下代码,调用webservice,获取接口返回的数据,呈现出来。
6接口返回了一个xml格式的数据,只需要稍作解析,即可获取中国北京的天气预报。
1,在Java项目中发布一个WebService服务:
如何发布?
——JDK16中JAX-WS规范定义了如何发布一个WebService服务;
(1)用jdk160_21以后的版本发布;
(2)与Web服务相关的类,都位于Javaxjws包中
@WebService——此注解用在类上指定将此类发布成一个WebService;
EndPoint——此类为端点服务类,其中publish()方法用于将一个已经添加了@WebService注解对象绑定到一个地址的端口上,用于发布。
2,例子:
(1)发布WebService服务
HelloWebServicejava:
[java] view plain copy
<span style="font-family:KaiTi_GB2312;font-size:18px;">package cntgbws;
importjavaxjwsWebMethod;
importjavaxjwsWebService;
importjavaxxmlwsEndpoint;
/
@WebService - 它是一个注解,用在类上指定将此类发布成一个ws
Endpoint – 此类为端点服务类,它的方法publish用于将一个已经添加了@WebService注解对象绑定到一个地址的端口上。
@author xuemin
/
@WebService
public classHelloWebService {
publicString HelloWord(String name){
return"Hello: "+name;
}
/
添加exclude=true后,HelloWord2()方法不会被发布
@param name
@return
/
@WebMethod(exclude=true)
publicString HelloWord2(String name){
return"Hello: "+name;
}
publicstatic void main(String[] args) {
/
参数1:服务的发布地址
参数2:服务的实现者
/
Endpointpublish("http://19216824138:456/helloWord",new HelloWebService());
}
}</span>
注:
@WebService- 它是一个注解,用在类上指定将此类发布成一个ws
Endpoint –此类为端点服务类,它的方法publish用于将一个已经添加了@WebService注解对象绑定到一个地址的端口上。
运行以上程序进行发布。
(2)查看wsdl
地址:http://19216824138:456/helloWordwsdl
只要在客户端浏览器能看到此WSDL文档,说明服务发布成功
以上服务发布成功;
总结:
如何发布一个Web服务:
a,在类上添加@WebService注解
(注:此注解是jdk16提供的,位于javaxjwsWebService包中)
b,通过EndPoint(端点服务)发布一个WebService
(注:EndPoint是jdk提供的一个专门用于发布服务的类,该类的publish方法接收两个参数,一个是本地的服务地址,二是提供服务的类。位于 javaxxmlwsEndpoint包中)
c,注:
类上添加注解@WebService,类中所有非静态方法都会被发布;
静态方法和final方法不能被发布;
方法上加@WebMentod(exclude=true)后,此方法不被发布;
(3)客户端访问发布的服务
根据WSDL文档来在客户端编写代码,访问发布的服务;
但是,WSDL文档看不懂怎么办?代码该如何编写?
——你看不懂,JDK看得懂,wsimport是JDK自带的,可以根据WSDL文档生成客户端调用代码的工具。无论服务器端WebService使用什么语言编写的,豆浆在客户端生成Java代码。所以服务器用什么语言编写的并不重要。
wsimportexe命令参数熟知:
-d:生成class文件。默认参数。
-s:生成Java文件
-p:自定义包结构
解析地址生成源码到E盘:
执行以上命令后,即可在E盘下生成如下包及类
注:还可以自定义包结构:
自定义包结构的命令:
将生成的包及java文件复制到客户端:如下图
创建访问服务的类:MyClientjava:
MyClientjava:
[java] view plain copy<span style="font-family:KaiTi_GB2312;font-size:18px;">package cntgbws;
public classMyClient {
publicstatic void main(String[] args) {
HelloWebServiceServicehwss = new HelloWebServiceService();
HelloWebServicehws = hwssgetHelloWebServicePort();
Stringresult=hwshelloWord("hanxuemin");
Systemoutprintln(result);
}
}</span>
(4)运行结果:
第一阶段:Java面向对象编程
1Java基本数据类型与表达式,分支循环。2String和的使用、正则表达式。3面向对象的抽象,封装,继承,多态,类与对象,对象初始化和回收;构造函数、this关键字、方法和方法的参数传递过程、static关键字、内部类,Java的垃极回收机制,Javadoc介绍。4对象实例化过程、方法的覆盖、final关键字、抽象类、接口、继承的优点和缺点剖析;对象的多态性:子类和父类之间的转换、抽象类和接口在多态中的应用、多态带来的好处。5Java异常处理,异常的机制原理。6常用的设计模式:Singleton、Template、Strategy模式。7JavaAPI介绍:种基本数据类型包装类,System和Runtime类,Date和DateFomat类等。8Java集合介绍:Collection、Set、List、ArrayList、Vector、LinkedList、Hashset、TreeSet、Map、HashMap、TreeMap、Iterator、Enumeration等常用集合类API。9JavaI/O输入输出流:File和类,字节流InputStream和,字符流Reader和Writer,以及相应实现类,IO性能分析,字节和字符的转化流,包装流的概念,以及常用包装类,计算机编码。10Java高级特性:反射、代理和泛型。11多线程原理:如何在程序中创建多线程(Thread、Runnable),线程安全问题,线程的同步,线程之间的通讯、死锁。12Socket网络编程。
第二阶段:JavaWeb开发
1Java解析XML文件DOM4J。2MySql数据库的应用、多表连接查询的应用。3Jsp和Servlet应用。4Http协议解析。5Tomcat服务器的应用配置。6WebService服务配置应用。
第三阶段:androidUI编程
1、Android开发环境搭建:Android介绍,Android开发环境搭建,第一个Android应用程序,Android应用程序目录结构。
2、Android初级控件的使用:
TextView控件的使用Button控件的使用方法EditText控件的使用方法View的使用方法RadioButton的使用方法Checkbox的使用方法Menu的使用方法
3、Android高级控件的使用:
的使用方法ListView的使用方法GridView的使用方法Adapter的使用方法Spinner的使用方法Gallary的使用方法ScrollView的使用方法
4、对话框与菜单的使用:
Dialog的基本概念AlertDialog的使用方法的使用方法Menu的使用方法自定义Menu的实现方法
5、控件的布局方法:
线性布局的使用方法相对布局的使用方法表格布局的使用方法
6、多Acitivity管理:
xml文件的作用Intent的使用方法使用Intent传递数据的方法启动Activity的方法的使用方法ActivityGroup的使用方法
7、自定义控件实现方法:
自定义ListView的实现方法可折叠ListView的使用方法自定义Adapter的实现方法自定义View的实现方法动态控件布局的上实现方法
第四阶段:android网络编程与数据存储
1、基于Android平台的HTTP通讯:
Http协议回顾ApacheCommons工具包介绍使用Get方法向服务器提交数据的方法解析服务器响应数据的方法使用POST方法向服务器提交数据的实现方法向服务器提交非文本数据的实现方法使用Http协议实现多线程下载使用Http协议实现断点续传
2、Android数据存储技术:
SQLite3数据库简介SQL语句回顾SQLite3编程接口介绍SQLite3事务管理SQLite3游标使用方法SQLite3性能分析访问SDCard的方法访问的方法
3、使用方法:
实现共享数据、URI的解析与UriMatcher、ContentUris的使用、使用操作、的监听Android当中的异步操作:Handler的使用方法;异步任务的基本概念;AsyncTask的使用方法。
第五阶段:android手机硬件管理
1、地图及定位技术:GPS简介;的使用方法;在GoogleMap上添加标记的方法;查询某地附近建筑的方法;使用GoogleMap实现点对点导航。
2、传感器使用方法:方向、加速度(重力)、光线、磁场、距离、温度等传感器的使用。
3、近场通信技术:NFC技术简介;NFC技术是用场景介绍;NFC技术实现方法。
4、媒体管理技术:MediaPlayer的使用方法。
5、触摸屏技术:手势识别;多点触摸技术。
第六阶段:Android图形编程技术
1、图形处理基础:2D图形编程基础;2、点、线、面等基本图形元素绘制方法;3、Android动画框架简介;4、位移动画的实现方法;5、淡入淡出动画的实现方法;6、旋转动画的实现方法;7、Matrix的使用方法。第七阶段:Android游戏开发1、Android游戏开发:Android游戏开发概述;2、SurfaceView的使用方法;3、物理小球技术;4、碰撞检测技术;5、、文字和背景音乐等资源的使用方法;6、游戏引擎基础概念;7、Cocoa2d-Android引擎使用方法;8、OpenGLES使用方法。
理论上是可以的,但是需要在
Linux服务器
上搭建NET平台,微软号称NET平台是可移植到Linux的,但是貌似现在很少有人这么干。
后来有一个Mono项目,据说可以很好的使C#程序运行在Linux平台,具体楼主可以谷歌百度之,这方面的资料还是有不少的。
0条评论