Socket通信中的服务器端,采用TcpListener
在TcpListner实例化时,就指定好了监听的IP和Port
然后通过AcceptSocket方法获得Socket对象。
2if(socket!=null)
3{
4if(socket.Connected)
5{
6intlength=socket.Receive(bContent);
7this.lstContent.Add(Encoding.Default.GetString(bContent,0,length));
8socket.Send(Encoding.Default.GetBytes("ReceiveOK!"));
9socket.Disconnect(false);
10}
11}
在PC端测试中,创建TcpClient对象
同样实例化TcpClient对象后,通过Client属性来获得Socket对象。
2client.Connect(newIPAddress(newbyte[]{192,168,0,157}),4564);
3byte[]bContent=newbyte[1024];
4if(client.Connected)
5{
6Socketsocket=client.Client;
7socket.Send(Encoding.Default.GetBytes("ClientSendOK!"));
8intlength=socket.Receive(bContent);
9System.Console.WriteLine(Encoding.Default.GetString(bContent,0,length));
10
11socket.Disconnect(false);
12socket.Close();
13client.Close();
14}
测试通过后,在Mobile设备中进行测试
在Mobile中,直接创建Socket对象。
这里想说明的是,你可以直接在通信2端直接创建Socket对象来连接,当然也可以创建TcpListener和TcpClient对象。效果是一样的。
2stringtmpString="";
3
4Socketsocket=newSocket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
5IPEndPointlocalEP=newIPEndPoint(newIPAddress(newbyte[]{192,168,0,157}),4564);
6socket.Connect(localEP);
7if(socket.Connected)
8{
9socket.Send(Encoding.Default.GetBytes("ClientSendOK!"));
10intlength=socket.Receive(bContent);
11tmpString=Encoding.Default.GetString(bContent,0,length);
12
13socket.Close();
14}
15MessageBox.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
模拟器如何实现,暂时没有找到相关资料。
本文详细介绍了Socket通信的基本原理及实现过程,包括服务器端使用TcpListener监听指定IP和端口,客户端通过TcpClient或直接使用Socket建立连接的方法。同时,还探讨了在不同平台如PC和移动设备上测试Socket通信的具体步骤。
1万+

被折叠的 条评论
为什么被折叠?



