.Net Compact Framework 基础篇(6)-- Socket通信

看到有很多人问关于WM中使用Socket的问题,做个Demo来演示下。在这个Demo过程中遇到的一些问题和大家分享下。

 

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 [] {  192 168 0 157  }),  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 [] {  192 168 0 157  }),  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);

 

效果如下:

服务器端:

.Net Compact Framework 基础篇(6)-- Socket通信

 

Mobile端:

.Net Compact Framework 基础篇(6)-- Socket通信

 

最后大家要注意的:

当在模拟器上测试时,服务器和客户端都在同一台机器上时,服务器的监听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

 

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

 

代码下载:MobileSocket.rar

 

Author:AppleSeeker
Date:2008-08-05

你可能感兴趣的:(framework)