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

简介:     .NET Micro Framework的Socket函数和桌面版.NET Framework中的函数完全兼容,换句话说,就是用.NET Micro Framework编写的Socket程序直接用桌面版的.NET Framework进行编译运行是完全没有问题的。

前几篇文章介绍了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浏览器中访问会出现如下网页。
image.png

       

不过,我们这个示例要比它复杂一些(也是在官方示例的基础上进行功能拓展),用我们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

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

    

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

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

   

下一篇文章,我们将介绍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/

相关文章
|
6月前
|
JSON 编解码 API
Go语言网络编程:使用 net/http 构建 RESTful API
本章介绍如何使用 Go 语言的 `net/http` 标准库构建 RESTful API。内容涵盖 RESTful API 的基本概念及规范,包括 GET、POST、PUT 和 DELETE 方法的实现。通过定义用户数据结构和模拟数据库,逐步实现获取用户列表、创建用户、更新用户、删除用户的 HTTP 路由处理函数。同时提供辅助函数用于路径参数解析,并展示如何设置路由器启动服务。最后通过 curl 或 Postman 测试接口功能。章节总结了路由分发、JSON 编解码、方法区分、并发安全管理和路径参数解析等关键点,为更复杂需求推荐第三方框架如 Gin、Echo 和 Chi。
|
10月前
|
机器学习/深度学习 编解码 计算机视觉
RT-DETR改进策略【Backbone/主干网络】| 2023 U-Net V2 替换骨干网络,加强细节特征的提取和融合
RT-DETR改进策略【Backbone/主干网络】| 2023 U-Net V2 替换骨干网络,加强细节特征的提取和融合
607 10
RT-DETR改进策略【Backbone/主干网络】| 2023 U-Net V2 替换骨干网络,加强细节特征的提取和融合
|
9月前
|
机器学习/深度学习 API Python
Python 高级编程与实战:深入理解网络编程与异步IO
在前几篇文章中,我们探讨了 Python 的基础语法、面向对象编程、函数式编程、元编程、性能优化、调试技巧、数据科学、机器学习、Web 开发和 API 设计。本文将深入探讨 Python 在网络编程和异步IO中的应用,并通过实战项目帮助你掌握这些技术。
|
11月前
|
监控 网络协议 安全
|
10月前
|
机器学习/深度学习 编解码 计算机视觉
YOLOv11改进策略【Backbone/主干网络】| 2023 U-Net V2 替换骨干网络,加强细节特征的提取和融合
YOLOv11改进策略【Backbone/主干网络】| 2023 U-Net V2 替换骨干网络,加强细节特征的提取和融合
670 0
YOLOv11改进策略【Backbone/主干网络】| 2023 U-Net V2 替换骨干网络,加强细节特征的提取和融合
|
监控 安全
公司上网监控:Mercury 在网络监控高级逻辑编程中的应用
在数字化办公环境中,公司对员工上网行为的监控至关重要。Mercury 作为一种强大的编程工具,展示了在公司上网监控领域的独特优势。本文介绍了使用 Mercury 实现网络连接监听、数据解析和日志记录的功能,帮助公司确保信息安全和工作效率。
262 51
|
10月前
|
人工智能 机器人
D1net阅闻 | 谷歌DeepMind研究发现LLM新特性
D1net阅闻 | 谷歌DeepMind研究发现LLM新特性
|
数据库连接 Go 数据库
Go语言中的错误注入与防御编程。错误注入通过模拟网络故障、数据库错误等,测试系统稳定性
本文探讨了Go语言中的错误注入与防御编程。错误注入通过模拟网络故障、数据库错误等,测试系统稳定性;防御编程则强调在编码时考虑各种错误情况,确保程序健壮性。文章详细介绍了这两种技术在Go语言中的实现方法及其重要性,旨在提升软件质量和可靠性。
209 1
|
网络协议 Unix Linux
精选2款C#/.NET开源且功能强大的网络通信框架
精选2款C#/.NET开源且功能强大的网络通信框架
471 0
|
12月前
|
SQL 安全 网络安全
网络安全与信息安全:知识分享####
【10月更文挑战第21天】 随着数字化时代的快速发展,网络安全和信息安全已成为个人和企业不可忽视的关键问题。本文将探讨网络安全漏洞、加密技术以及安全意识的重要性,并提供一些实用的建议,帮助读者提高自身的网络安全防护能力。 ####
279 17