• 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

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

  • 相关阅读:
    类的无参方法笔记
    类的无参预习内容
    类和对象
    洛谷 题解 P2010 【回文日期】
    洛谷 题解 CF711A 【Bus to Udayland】
    洛谷 题解 P2676 【超级书架】
    洛谷 题解 CF903B 【The Modcrab】
    洛谷 题解 P1585【魔法阵】
    HDU 2553【N皇后问题】
    一些函数
  • 原文地址:https://www.cnblogs.com/xyzlmn/p/3168390.html
Copyright © 2020-2023  润新知