zoukankan      html  css  js  c++  java
  • Net Compact Framework 基础篇(6) Socket通信 【转】

    Socket通信中的服务器端,采用TcpListener

    在TcpListner实例化时,就指定好了监听的IP和Port

    1 listener = new TcpListener(IPAddress.Any, 4564);

    然后通过AcceptSocket方法获得Socket对象。

     1 socket = listener.AcceptSocket();
     2 if (socket != null)
     3 {
     4     if (socket.Connected)
     5     {
     6         int length = socket.Receive(bContent);
     7         this.lstContent.Add(Encoding.Default.GetString(bContent, 0, length));
     8         socket.Send(Encoding.Default.GetBytes("Receive OK!"));
     9         socket.Disconnect(false);
    10     }
    11 }

    在PC端测试中,创建TcpClient对象

    同样实例化TcpClient对象后,通过Client属性来获得Socket对象。

     1 TcpClient client = new TcpClient();
     2 client.Connect(new IPAddress(new byte[] { 1921680157 }), 4564);
     3 byte[] bContent = new byte[1024];
     4 if (client.Connected)
     5 {
     6     Socket socket = client.Client;
     7     socket.Send(Encoding.Default.GetBytes("Client Send OK!"));
     8     int length = socket.Receive(bContent);
     9     System.Console.WriteLine(Encoding.Default.GetString(bContent, 0, length));
    10 
    11     socket.Disconnect(false);
    12     socket.Close();
    13     client.Close();
    14 }

    测试通过后,在Mobile设备中进行测试

    在Mobile中,直接创建Socket对象。

    这里想说明的是,你可以直接在通信2端直接创建Socket对象来连接,当然也可以创建TcpListener和TcpClient对象。效果是一样的。

     1 byte[] bContent = new byte[1024];
     2 string tmpString = "";
     3 
     4 Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
     5 IPEndPoint localEP = new IPEndPoint(new IPAddress(new byte[] { 1921680157 }), 4564);
     6 socket.Connect(localEP);
     7 if (socket.Connected)
     8 {
     9     socket.Send(Encoding.Default.GetBytes("Client Send OK!"));
    10     int length = socket.Receive(bContent);
    11     tmpString = Encoding.Default.GetString(bContent, 0, length);
    12 
    13     socket.Close();
    14 }
    15 MessageBox.Show(tmpString);

    效果如下:

    服务器端:

    Mobile端:

    最后大家要注意的:

    当在模拟器上测试时,服务器和客户端都在同一台机器上时,服务器的监听IP特别注意,一定要设为IPAddress.Any。否则指定了一个IP后,在Mobile设备进行Socket通讯时,会有问题,会报强制关闭一个连接的错误。

    其实模拟器或实际设备都是通过DMA的方式访问网络资源,这样的话,访问速度会快很多。当然,你也可以设置模拟器或者实际设备通过TCP/IP方式连接。但这样做法不提倡。

    如何实现通过TCP/IP方式连接:

    在Tools->Options->Device Tools->Devices->选择一个设备->Properties->将Transport改成Tcp Connect Transport即可。

    在部署到实际设备时,还需要拷贝Programs Files/Common Files/Microsoft Shared/CoreCon/1.0/Target/wce400/<CPU>文件夹下的dll和exe拷贝到设备的Windows目录

    然后在设备中运行CommanClient2.exe

    如果设备上的安全功能开启的话,还要运行设备上的CMAccept.exe

    模拟器如何实现,暂时没有找到相关资料。

  • 相关阅读:
    elasticsearch 中的Multi Match Query
    activiti 流程部署的各种方式
    elasticsearch 嵌套对象之嵌套类型
    elasticsearch Java High Level REST 相关操作封装
    elasticsearch 字段数据类型
    ubuntu 安装 docker
    elasticsearch 通过HTTP RESTful API 操作数据
    facenet 人脸识别(二)——创建人脸库搭建人脸识别系统
    POJ 3093 Margaritas(Kind of wine) on the River Walk (背包方案统计)
    墨卡托投影, GPS 坐标转像素, GPS 坐标转距离
  • 原文地址:https://www.cnblogs.com/xyzlmn/p/3168390.html
Copyright © 2011-2022 走看看