“C#”要怎么推送消息到客户端?

“C#”要怎么推送消息到客户端?,第1张

服务器端:

namespace SocketServer

{

class Program

{

private static byte[] result = new byte[1024];

private static int myProt = 8885; //端口

static Socket serverSocket;

static void Main(string[] args)

{

//服务器IP地址

IPAddress ip = IPAddressParse("127001");

serverSocket = new Socket(AddressFamilyInterNetwork, SocketTypeStream, ProtocolTypeTcp);

serverSocketBind(new IPEndPoint(ip, myProt)); //绑定IP地址:端口

serverSocketListen(10); //设定最多10个排队连接请求

ConsoleWriteLine("启动监听{0}成功", serverSocketLocalEndPointToString());

//通过Clientsoket发送数据

Thread myThread = new Thread(ListenClientConnect);

myThreadStart();

ConsoleReadLine();

}

/// <summary>

/// 监听客户端连接

/// </summary>

private static void ListenClientConnect()

{

while (true)

{

Socket clientSocket = serverSocketAccept();

clientSocketSend(EncodingASCIIGetBytes("Server Say Hello"));

Thread receiveThread = new Thread(ReceiveMessage);

receiveThreadStart(clientSocket);

}

}

/// <summary>

/// 接收消息

/// </summary>

/// <param name="clientSocket"></param>

private static void ReceiveMessage(object clientSocket)

{

Socket myClientSocket = (Socket)clientSocket;

while (true)

{

try

{

//通过clientSocket接收数据

int receiveNumber = myClientSocketReceive(result);

ConsoleWriteLine("接收客户端{0}消息{1}", myClientSocketRemoteEndPointToString(), EncodingASCIIGetString(result, 0, receiveNumber));

}

catch(Exception ex)

{

ConsoleWriteLine(exMessage);

myClientSocketShutdown(SocketShutdownBoth);

myClientSocketClose();

break;

}

}

}

}

}

客户端:

namespace SocketClient

{

class Program

{

private static byte[] result = new byte[1024];

static void Main(string[] args)

{

//设定服务器IP地址

IPAddress ip = IPAddressParse("127001");

Socket clientSocket = new Socket(AddressFamilyInterNetwork, SocketTypeStream, ProtocolTypeTcp);

try

{

clientSocketConnect(new IPEndPoint(ip, 8885)); //配置服务器IP与端口

ConsoleWriteLine("连接服务器成功");

}

catch

{

ConsoleWriteLine("连接服务器失败,请按回车键退出!");

return;

}

//通过clientSocket接收数据

int receiveLength = clientSocketReceive(result);

ConsoleWriteLine("接收服务器消息:{0}",EncodingASCIIGetString(result,0,receiveLength));

//通过 clientSocket 发送数据

for (int i = 0; i < 10; i++)

{

try

{

ThreadSleep(1000); //等待1秒钟

string sendMessage = "client send Message Hellp" + DateTimeNow;

clientSocketSend(EncodingASCIIGetBytes(sendMessage));

ConsoleWriteLine("向服务器发送消息:{0}" + sendMessage);

}

catch

{

clientSocketShutdown(SocketShutdownBoth);

clientSocketClose();

break;

}

}

ConsoleWriteLine("发送完毕,按回车键退出");

ConsoleReadLine();

}

}

}

  所谓的消息推送就是从服务器端向移动终端发送连接,传输一定的信息。比如一些新闻客户端,每隔一段时间收到一条或者多条通知,这就是从服务器端传来的推送消息;还比如常用的一些IM软件如微信、GTalk等,都具有服务器推送功能。

推送方法如下:

  1)通过SMS进行服务器端和客户端的交流通信。

  在Android平台上,你可以通过拦截SMS消息并且解析消息内容来了解服务器的意图,可以实现完全的实时操作。但是问题是这个方案的成本相对比较高,且依赖于运营商。

  2)循环主动定时获取

  这种方法需要客户端来做一个定时或者周期性的访问服务器端接口,以获得最新的消息。轮询的频率太慢可能导致某些消息的延迟,太快则会大量消耗网络带宽和电池。

  3)持久连接

  这个方案可以解决由轮询带来的性能问题,但是还是会消耗手机的电池。我们需要开一个服务来保持和服务器端的持久连接(苹果就和谷歌的C2DM是这种机制)。但是对于Android系统,当系统可用资源较低,系统会强制关闭我们的服务或者是应用,这种情况下连接会强制中断。(Apple的推送服务之所以工作的很好,是因为每一台手机仅仅保持一个与服务器之间的连接,事实上C2DM也是这么工作的。即所有的推送服务都是经由一个代理服务器完成的,这种情况下只需要和一台服务器保持持久连接即可。C2DM=Cloud to Device Messaging)。

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » “C#”要怎么推送消息到客户端?

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情