【.Net MF网络开发板研究-04】Socket编程之服务端

简介:

前几篇文章介绍了Http相关的应用,其实从技术角度而言,应该先介绍Socket编程,然后再介绍Http,毕竟Http是用Socket相关函数编程实现的。

     .NET Micro Framework的Socket函数和桌面版.NET Framework中的函数完全兼容,换句话说,就是用.NET Micro Framework编写的Socket程序直接用桌面版的.NET Framework进行编译运行是完全没有问题的。但是反之则不一定可以,因为.NET Micro Framework提供的函数是最基本的,去掉了一些实现同样功能的重载函数。

     官方示例中包含了SocketServer,我们在《IP地址设定及简单web演示》文章中的示例其实就是在这个官方示例的基础上进行改进的,它用Socket实现了最简单的Web应用,在IE浏览器中访问会出现如下网页。

           

      不过,我们这个示例要比它复杂一些(也是在官方示例的基础上进行功能拓展),用我们PC端编好的Socket客户端程序和它去连接,并进行直接的数据交互,这样就比较容易明了Socket的通信过程了。

      为了便于在LCD屏上显示信息,我们需要引用我提供的System.TinyGUI库(当然也可以用WPF技术在LCD屏上显示信息,不过如果你真的要这样去做的话,你会发现好麻烦的),关于System.TinyGUI库,我们在《为Cortex-M3打造轻量级TinyGUI》、《TinyGUI绘图示例》、《TinyGUI位图显示》和《让TinyGUI库支持模拟器》等文章中均有详细的介绍,该库的下载地址:http://www.sky-walker.com.cn/MFRelease/library/System.TinyGUI.rar

    该下载包里含有TinyGUI的示例代码和说明文档,所以我们这里就不多说了。

     用Socket建立一个基于Socket的TCP服务器,代码如下(来自于官方示例代码):

    Socket server = new Socket(AddressFamily.InterNetwork,SocketType.Stream, ProtocolType.Tcp);

    IPEndPoint localEndPoint = new IPEndPoint(IPAddress.Any, c_port);

    server.Bind(localEndPoint);

    server.Listen(Int32.MaxValue);

    while (true)

    {

         // Wait for a client to connect.

         Socket clientSocket = server.Accept();

          // Process the client request.  true means asynchronous.

           new ProcessClientRequest(clientSocket, true);

      }

    我们把官方示例中的如下代码:

    // Return a static HTML document to the client.

    String s ="HTTP/1.1 200 OK\r\nContent-Type: text/html; charset=utf-8\r\n\r\n<html><head><title>.NET Micro Framework Web Server</title></head>" +                       "<body><bold><a href=\"http://www.microsoft.com/netmf/\">Learn more about the .NET Micro Framework by clicking here</a></bold></body></html>";

    m_clientSocket.Send(Encoding.UTF8.GetBytes(s));

     修改为:

    byte[] bytData = new byte[bytesRead];

    Array.Copy(buffer, bytData, bytData.Length);

    string s = new string(System.Text.UTF8Encoding.UTF8.GetChars(bytData));

    System.TinyGUI.Graphics.Print(s); //显示当前接收的数据

    m_clientSocket.Send(bytData);     //把接收的数据直接返回

     此外还要对这个代码加上While循环,否则它就只接收一次数据,就返回了。

     好了,对代码进行编译,部署到开发板中并运行。

     这里,我们就不现编写TCP client代码了,直接用我已经编写好的工具进行测试即可,下载地址如下:http://www.sky-walker.com.cn/MFRelease/Tools/YFTCPClient.rar

     运行后,我们填写好开发板的地址和端口号,然后和开发板进行通信测试,测试的效果图如下:

       

     可以看到,我们发出什么,则开发板原样返回什么。

     开发板LCD屏上,也显示了相应的接收到的数据,如下图:

        

      下一篇文章,我们将介绍Socket之客户端代码的编写。

 -----------------------------------------------------------------------------------------

本文源码:http://www.sky-walker.com.cn/MFRelease/Sample/YFMFSocketServer.rar

MF简介:http://blog.csdn.net/yefanqiu/article/details/5711770

官方网站:http://www.sky-walker.com.cn/

 




本文转自yefanqiu51CTO博客,原文链接:http://blog.51cto.com/yfsoft/614940,如需转载请自行联系原作者

相关文章
.Net Micro Framework研究—Digi开发板初探
写的比较基础全面,由于我们北航的研发团队先研究了Digi的开发板,所以直到今天Digi开发板才到我的手上,我的《Micro Framework研究》系列文章以后也会陆续推出
706 0
.Net Micro Framework研究—IO读写
试验平台:Digi MF开发板
439 0
.Net Micro Framework研究—串口操作
试验平台:Digi MF开发板,Digi提供的示例中包含了串口的示例程序
559 0
|
网络协议
.Net Micro Framework研究—TCP/IP通信
关于网络通信方面,Digi提供了两个程序,一个是TCP Server运行在Digi的开发板上,一个是TCP Client程序,运行在PC上,通过网络,上位机很容易控制Digi开发的IO信号
626 0
.Net Micro Framework研究—模拟器改造
由于Digi提供的开发板没有LCD显示屏,所以有关绘图方面的操作,只好在模拟器上进行了。
542 0
|
Windows
.Net Micro Framework研究—中文显示
微软示例程序中,仅支持两种字体(small.tinyfnt和NinaB.tinyfnt),并不支持中文。
581 0
.Net Micro Framework研究—绘图
目前在VS2005的环境里,还不支持.Net Micro Framework界面的所见即所得绘制,界面制作有三种方式,一是窗体直接绘图,二是Panel+形状对象、三是窗体+控件。第一种做法让人觉得又回到了DOS时代,回到了SCREEN 12的16色的世界里。
483 0
.Net Micro Framework研究—Shapes命名空间
在Microsoft.SPOT.Presentation.Shapes命名空间下,包含几个形状对象,主要有Ellipse、Line、Polygon、Rectangle,同样也只有Rectangle实现的最好,其他形状都不支持填充色,虽然每个对象都有Fill属性。
623 0
.Net Micro Framework研究—窗体控件
目前版本的MF对TCP协议栈支持也并不完善(对串口也谈不上完善,毕竟不支持奇偶校验、停止位设置),Digi的以太网口是加入了自己的处理方案,明年二月份微软将要发布的MF V3.0版,就已经完全支持TCP了,到时候MF最理想的应用也许就是通信转换了。
494 0
.Net Micro Framework研究—应用实例
在前几篇关于.Net Micro Framework的研究文章中,我对它的绘图功能实不敢恭维,不过微软的MF开发人员很聪明,对位图方面的功能实现的就比较完善,这样做起图形应用来就不至于捉襟见肘了。前段时间用.Net Compact Framework实现了一个奥运场馆查询
527 0