前几篇文章介绍了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/

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

  1. 【.Net MF网络开发板研究-01】IP地址设定及简单web演示

    早期推出的开发板并不具备网口,所以.NET Micro Framework很多基于网络的功能,便无从研究了,其实在物联网时代,具备网络功能才是王道. 新开发板除了具备以太网模块以外,还增加了USB H ...

  2. 【.Net MF网络开发板研究-03】获取雅虎天气(HttpClient示例)

    在上篇文章介绍了Http Server,通过PC上的IE浏览器(相当于Http client)来访问开发板上的Http服务.这次我们在网络开发板上实现Http Client,获取雅虎网站的天气信息,并 ...

  3. OSI七层、TCP/IP五层、UDP、TCP的socket编程(服务端及客户端)、字节序转换、多进程以及多线程服务端的实现

    1.网络以覆盖范围划分:局域网/城域网/广域网   互联网/因特网   以太网/令牌环网--组网方式 2.在网络中必须能够为一表示每一台主机,才能实现点到点的精确通信            IP地址: ...

  4. python实现socket编程,服务端开启多线程(和多个客户端聊天)

    首先运行服务端,待服务端运行起来之后,最后开始运行客户端进行对话,可以运行多个客户端和服务端对话,注意这个开启的客户端的顺序和服务端的聊天顺序(其实就是阻塞,待上一个客户端和服务端的一段对话结束之后, ...

  5. MFC:Socket编程—TCP服务端和多个客户端通信

    前言 MFC是微软基础类库,于 C++ 对于 C语言来说,MFC对于window API ,MFC 就相当于C++,window API 相当于C.MFC 封装了 window API 使用起来更加的 ...

  6. C++ socket编程 实现服务端与客户端的通讯

     服务器端程序: [cpp] view plaincopy // Server.cpp : Defines the entry point for the console application. ...

  7. Qt:Qt实现Winsock网络编程—TCP服务端和客户端通信(多线程)

    Qt实现Winsock网络编程-TCP服务端和客户端通信(多线程) 前言 感觉Winsock网络编程的api其实和Linux下网络编程的api非常像,其实和其他编程语言的网络编程都差不太多.博主用Qt ...

  8. html5 websocket与c,打通B/S与C/S !让HTML5 WebSocket与.NET Socket公用同一个服务端!

    随着HTML5 WebSocket技术的日益成熟与普及,我们可以借助WebSocket来更加方便地打通BS与CS -- 因为B/S中的WebSocket可以直接连接到C/S的服务端,并进行双向通信.如 ...

  9. Android网络开发(一、Socket通信HTTP通信)

    一.Socket通信   Socket:即套接字,其本身并不是一种通信协议,它是封装了TCP/IP.UDP 协议的API实现.在创建Socket对象后,底层会完成TCP/IP的三次握手等(UDP协议对 ...

最新文章

  1. Scala协变与Java泛型
  2. UGUI的优点新UI系统四 开源
  3. 2011年使用率增长最快的十大Web技术
  4. ALEIDoc EDI(8)--Serialization
  5. acquisition calculation
  6. requirejs加载顺序_前端模块化之AMD — Requirejs的使用
  7. WCF服务端基于配置的实现——拦截
  8. pythondjango项目集成_Django集成celery实战小项目
  9. 关于行内元素的margin padding一些说明;background-color的范围
  10. 阿里巴巴官方最新Redis开发规范!
  11. Mac python3连接mysql
  12. udp socket 接收数据
  13. 【水】java试手—poj 2387
  14. 市场调研报告-加工食品包装市场现状及未来发展趋势
  15. learn python the hard way中文pdf_Learn Python 3 the Hard Way .pdf
  16. 奶粉的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  17. 四阶魔方玩法总结V1.0
  18. 初学者教程:3D打印后期处理
  19. 七牛云的免费SSL证书申请和用法
  20. swf文件转换其他视频格式工具(例:swf to mp4) ,转换后的视频无水印

热门文章

  1. 【leetcode】1018. Binary Prefix Divisible By 5
  2. Office 2016使用NTKO OFFICE控件提示“文件存取错误”的解决办法
  3. NO.7 今天我们是实用派,看看业务选择和部署以及常用故障解决方案是怎么做的...
  4. 在浏览器中进行深度学习:TensorFlow.js (四)用基本模型对MNIST数据进行识别
  5. Kubernetes v1.0特性解析
  6. Kernel那些事儿之内存管理(7) --- Slab(上)
  7. Android短信管家视频播放器代码备份
  8. KOAProgressBar
  9. java 调用webservice的各种方法总结
  10. push、pop指令