C# 移动端与PC端的数据交互(一)

2015-07-16 12:08:40 · 作者: · 浏览: 3

小记:针对目前功能越来越强大的智能手机来说,在PC端支持对手机中的用户数据作同步、备份以及恢复等保护措施的应用已经急需完善。不仅要对数据作保护,而且用户更希望自己的手机跟PC能够一体化,以及和远程服务器的一体化。用户希望在手机端的操作能够转移到PC端,对于PC端大屏幕的电脑来说,完成同样的操作可以大量的节省用户的时间。对于功能强大的手机来说,有近1/2的应用可以在PC端同步。所以对PC端应用的规划要以系统的角度来对待。同时要保证手机端和PC端的主流交互模式应保持一致。个人观点:数据的一体化和管理的多元化是以后发展的一个趋势。下面进行今天的学习,今天的实验室移动端和PC端的数据交互及解析。


1,如何实现移动端和PC端的数据交互?


  答:1,蓝牙? 2,NFC技术 3,红外 4,Socket.


C# 移动端与PC端的数据交互


NFC和蓝牙的异同点:


  相同点:都是近距离传输。


  不同点: NFC优于红外和蓝牙传输方式。作为一种面向消费者的交易机制,NFC比红外更快、更可靠而且简单得多,不用向红外那样必须严格的对齐才能传输数据。与蓝牙相比,NFC面向近距离交易,适用于交换财务信息或敏感的个人信息等重要数据;蓝牙能够弥补NFC通信距离不足的缺点,适用于较长距离数据通信。因此,NFC和蓝牙互为补充,共同存在。事实上,快捷轻型的NFC 协议可以用于引导两台设备之间的蓝牙配对过程,促进了蓝牙的使用。但是要实现远距离的数据传输那就只能用Socket了,


下面进行代码的分析:


首先在PC上建立服务端Server.cs


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net;
using System.Net.Sockets;
using System.Threading;


namespace TcpServer
{
? ? class Program
? ? {
? ? ? ? public static Socket serverSocket;
? ? ? ? static Thread threadSend;
? ? ? ? static Thread sendDataToClient;
? ? ? ? static int count = 1;
? ? ? ? static void Main(string[] args)
? ? ? ? {
? ? ? ? ? ? //确定端口号
? ? ? ? ? ? int port = 121;


? ? ? ? ? ? //设定连接IP
? ? ? ? ? ? string host = "192.168.1.100";


? ? ? ? ? ? //将IP地址字符串转化为IP地址实例
? ? ? ? ? ? IPAddress ip = IPAddress.Parse(host);


? ? ? ? ? ? //将网络端点表示为 IP 地址和端口号
? ? ? ? ? ? IPEndPoint ipe = new IPEndPoint(ip, port);


? ? ? ? ? ? //建立Socket
? ? ? ? ? ? //addressFamily 参数指定 Socket 类使用的寻址方案
? ? ? ? ? ? //socketType 参数指定 Socket 类的类型
? ? ? ? ? ? //protocolType 参数指定 Socket 使用的协议。
? ? ? ? ? ? Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);


? ? ? ? ? ? //socket与本地终结点建立关联
? ? ? ? ? ? socket.Bind(ipe);
? ? ? ? ? ? while (true)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? //开始监听端口
? ? ? ? ? ? ? ? socket.Listen(0);


? ? ? ? ? ? ? ? Console.WriteLine("服务已开启,请等待....." + DateTime.Now.ToString() + DateTime.Now.Millisecond.ToString());


? ? ? ? ? ? ? ? //为新建的连接建立新的Socket目的为客户端将要建立连接
? ? ? ? ? ? ? ? serverSocket = socket.Accept();
? ? ? ? ? ? ? ? Console.WriteLine("连接已建立......" + DateTime.Now.ToString() + DateTime.Now.Millisecond.ToString());
? ? ? ? ? ? ? ? Console.WriteLine("客户端IP:"+serverSocket.RemoteEndPoint);
? ? ? ? ? ? ? ? string recStr =string.Empty;
? ? ? ? ? ? ? ? //定义缓冲区用于接收客户端的数据
? ? ? ? ? ? ? ? byte[] recbyte = new byte[1024];
? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ReceiveData();
? ?
? ? ? ? ? ? ? ? sendDataToClient = new Thread(sendData);
? ? ? ? ? ? ? ? sendDataToClient.Start();


? ? ? ? ? ? }
? ? ? ? }


? ? ? ? #region
? ? ? ? ///


? ? ? ? /// 异步连接
? ? ? ? ///

? ? ? ? ///
? ? ? ? ///
? ? ? ? ///
? ? ? ? public static void Connect(IPAddress ip, int port)
? ? ? ? {
? ? ? ? ? ? serverSocket.BeginConnect(ip, port, new AsyncCallback(ConnectCallback), serverSocket);
? ? ? ? }


? ? ? ? private static void ConnectCallback(IAsyncResult ar)
? ? ? ? {
? ? ? ? ? ? try
? ? ? ? ? ? {
? ? ? ? ? ? ? ? Socket handler = (Socket)ar.AsyncState;
? ? ? ? ? ? ? ? handler.EndConnect(ar);
? ? ? ? ? ? }
? ? ? ? ? ? catch (SocketException ex)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? throw ex;
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? ///


? ? ? ? /// 发送数据
? ? ? ? ///

? ? ? ? ///
? ? ? ? public static void Send(string data)
? ? ? ? {
? ? ? ? ? ? //Send(System.Text.Encoding.UTF8.GetBytes(data));
? ? ? ? ? ? Send(UTF8Encoding.UTF8.GetBytes(data));
? ? ? ? }
? ? ? ? ///
? ? ? ? /// 发送数据
? ? ? ? ///

? ? ? ? ///
? ? ? ? private static void Send(byte[] byteData)
? ? ? ? {
? ? ? ? ? ? try
? ? ? ? ? ? {
? ? ? ? ? ? ? ? int length = byteData.Length;
? ? ? ? ? ? ? ? byte[] head = BitConverter.GetBytes(length);
? ? ? ? ? ? ? ? byte[] data = new byte[head.Length + byteData.Length];
? ? ? ? ? ? ? ? Array.Copy(head, data, head.Length);
? ? ? ? ? ? ? ? Array.Copy(byteData, 0, data, head.