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

服务器端如何给客户端群发通知 C# SOCKET TCP - C#当前位置:& &&&服务器端如何给客户端群发通知 C# SOCKET TCP服务器端如何给客户端群发通知 C# SOCKET TCPwww.MyException.Cn&&网友分享于:&&浏览:0次服务器端怎么给客户端群发通知 C# SOCKET TCP如题:
&&&&&&当前实现了,客户机给服务机发消息,服务器回应消息.
&&&&&如何实现服务器给所有客户机发通知消息?------解决思路----------------------........既然客户端和服务器已经连接上了&那么服务器端就有了&每个客户端的SOCKET对象&,把这些对象存起来,循环发送就是!
LZ上你的代码吧&我给你说说------解决思路----------------------UDP&广播,当然这需要客户端侦听广播口
网段的最后一个地址就是广播地址,端口自行商定------解决思路----------------------客户端通常在&NAT&路由器后边,而且通常在“多层”交换机后边。因此服务器不可能访问客户端。
要推送消息,首先需要客户端连接服务器,然后保持长连接。任何保持长连接的方式都是可以考虑的。实际上&WebSocket&也是长连接的,所以现在即使是网页也是可以随时得到服务器推送消息的(尽管大多数程序员还需要等着别人把技术“喂到嘴边”才采纳)。
------解决思路----------------------要注意“组播”只是在局域网同一个网段内。所以如果没有特别的说明是要求组播时,不要考虑这些。------解决思路----------------------循环就行了....
当你每个客户端执行到BeginAccept的时候&&就有一个socket对象.
然后你把这个对象装到集合中..
divt&string,socket&其中string表示ip:port
因为是tcp所以他们一直存在&有100个tcp_client&这个集合就有100个
循环value.send就行了------解决思路----------------------客户端关闭tcp之后&服务器会收到信息的..
这个时候还是有一个socket对象..
或者&你服务端在catch里&可以捕获客户端掉线..
那么&你在把dict里面的这个掉线的移除..
保证list中&只是在线的tcp集合就可以了.------解决思路----------------------引用:感谢:代码大致如下.
&&&&&&&&&&&&TcpListener&listener=new&TcpListerer(本机IP,端口30);
&&&&&&&&&&&&listener.start();
&&&&&&&&&&&&listener.BeginAcceptTcpClient(callback);异步等待监听
&&&&&&&&&&&&回调函数:callback(IAsyncResult&handler)
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&TcpClient&client&=&this.EndAcceptTcpClient(handler);//&客户端对象
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&NetworkStream&stream&=&client.GetStream();//&获得流&准备传输数据
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&stream.BeginRead(异步读取回调函数);//&开始异步读取
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&继续异步监听listener.BeginAcceptTcpClient(callback)
&&&&&&&&&&&&&异步读取回调函数:callback()
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&EndRead();//结束异步读取
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&stream.BeginRead();//&再次开始异步
大概是这样,怎么给客户机主动发消息?
Quote: 引用:
........既然客户端和服务器已经连接上了&那么服务器端就有了&每个客户端的SOCKET对象&,把这些对象存起来,循环发送就是!
LZ上你的代码吧&我给你说说
引用:感谢:代码大致如下.
&&&&&&&&&&&&TcpListener&listener=new&TcpListerer(本机IP,端口30);
&&&&&&&&&&&&listener.start();
&&&&&&&&&&&&listener.BeginAcceptTcpClient(callback);异步等待监听
&&&&&&&&&&&&回调函数:callback(IAsyncResult&handler)
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&TcpClient&client&=&this.EndAcceptTcpClient(handler);//&客户端对象
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&NetworkStream&stream&=&client.GetStream();//&获得流&准备传输数据
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&stream.BeginRead(异步读取回调函数);//&开始异步读取
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&继续异步监听listener.BeginAcceptTcpClient(callback)
&&&&&&&&&&&&&异步读取回调函数:callback()
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&EndRead();//结束异步读取
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&stream.BeginRead();//&再次开始异步
大概是这样,怎么给客户机主动发消息?
Quote: 引用:
........既然客户端和服务器已经连接上了&那么服务器端就有了&每个客户端的SOCKET对象&,把这些对象存起来,循环发送就是!
LZ上你的代码吧&我给你说说
&&TcpClient&client&=&this.EndAcceptTcpClient(handler);/
把这个client&存到字典中,然后循环发送就这个字典Dictionary
&服务器端有Send方法&直接把client&循环出来------解决思路----------------------引用:您好..我还是使用的你那个帖子的代码,整个过程依然没完全搞弄,不知道用你那个代码可否实现给客户机群发?
它完成了客户端连接服务器、保持长连接、双向通讯。
12345678910
12345678910
12345678910 上一篇:下一篇:文章评论相关解决方案 12345678910 Copyright & &&版权所有C#微信接口之推送模板消息功能示例
作者:兰給
字体:[ ] 类型:转载 时间:
这篇文章主要介绍了C#微信接口之推送模板消息功能,结合实例形式分析了C#操作微信推送模板消息接口的具体操作步骤与相关使用技巧,需要的朋友可以参考下
本文实例讲述了C#微信接口之推送模板消息功能。分享给大家供大家参考,具体如下:
public string SendTempletMessge()
string strReturn = string.E
#region 获取access_token
string apiurl = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=你的appid&secret=你的secret";
WebRequest request = WebRequest.Create(@apiurl);
request.Method = "POST";
WebResponse response = request.GetResponse();
Stream stream = response.GetResponseStream();
Encoding encode = Encoding.UTF8;
StreamReader reader = new StreamReader(stream, encode);
string detail = reader.ReadToEnd();
var jd = JsonConvert.DeserializeObject&WXApi&(detail);
string token = (String)jd.access_
#endregion
#region 组装信息推送,并返回结果(其它模版消息于此类似)
string url = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" +
string temp = "{\"touser\": \"" + UserInfo.OpenID + "\"," +
"\"template_id\": \"f3kRRjJeyLDf4tndtg-OJeRvgEdgjjDxCy4T9kuwM70\", " +
"\"topcolor\": \"#FF0000\", " +
"\"data\": " +
"{\"first\": {\"value\": \"您好,您有一条回款通知信息\"}," +
"\"keyword1\": { \"value\": \"单位名称\"}," +
"\"keyword2\": { \"value\": \"日期\"}," +
"\"keyword3\": { \"value\": \"金额\"}," +
"\"keyword4\": { \"value\": \"业务员\"}," +
"\"remark\": {\"value\": \"\" }}}";
#endregion
//核心代码
GetResponseData(temp, @url);
strReturn = "推送成功";
catch (Exception ex)
strReturn = ex.M
return strR
/// &summary&
/// 返回JSon数据
/// &/summary&
/// &param name="JSONData"&要处理的JSON数据&/param&
/// &param name="Url"&要提交的URL&/param&
/// &returns&返回的JSON处理字符串&/returns&
public string GetResponseData(string JSONData, string Url)
byte[] bytes = Encoding.UTF8.GetBytes(JSONData);
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);
request.Method = "POST";
request.ContentLength = bytes.L
request.ContentType = "json";
Stream reqstream = request.GetRequestStream();
reqstream.Write(bytes, 0, bytes.Length);
//声明一个HttpWebRequest请求
request.Timeout = 90000;
//设置连接超时时间
request.Headers.Set("Pragma", "no-cache");
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream streamReceive = response.GetResponseStream();
Encoding encoding = Encoding.UTF8;
StreamReader streamReader = new StreamReader(streamReceive, encoding);
string strResult = streamReader.ReadToEnd();
streamReceive.Dispose();
streamReader.Dispose();
return strR
涉及到的实体:
public class WXApi
public string access_token { }
更多关于C#相关内容感兴趣的读者可查看本站专题:《》、《》、《》、《》及《》
希望本文所述对大家C#程序设计有所帮助。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具本帖子已过去太久远了,不再提供回复功能。关于Socket主动推送客户端的问题_百度知道
关于Socket主动推送客户端的问题
需求是Socket主动推送到客户端数据,而且是循环推送,在一定时间内,把最新的数据推送给客户端,客户端只能请求一次。
我有更好的答案
通常所谓的推送,其实还是客户端跟服务器请求,你的这个需求指的是客户端跟服务器注册(由服务器管理客户端状态,比如记录客户端ip和port,放在服务器的缓存里),由服务器主动发起请求像客户端发送消息,而客户端要启动一个监听线程(起到的是传统服务器功能)
我这边只做服务端,只要客户端发出一次请求,我这边就把数据发给它,但是要在一定时间内一直主动的把数据发给客户端
现在有3条数据,我就要告诉客户端有3条,有4条的时候就要告诉客户端有4条
我的数据数量必须要和客户端显示保持一致。
哦,那这个还是客户端的问题,你们双方要协商好接口,比如你们约好先返回条数,然后返回数据,客户端那边就可以这么写:getCount();for(int i : getCount()){connectAndGetData();}
你的意思是 要客户端 循环请求我的接口?这样不妥吧,后期用户数量增加到5万
这并发怎么办?
请求一次就是5万次? 5万人没人请求两次 就是10万次
服务器吃的消?
服务器只做监听其实比既做监听又主动发起请求要节省得多
为您推荐:
其他类似问题
socket的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。所有回答(4)
用socket是能解决,但是,必须在客户端开socket侦听,还要服务器端记录客户端的信息。这个方案优点是绝对及时,缺点是:服务器端要维护一些数据,而且客户端如果因为某种原因网络故障之类的,会导致意外,这个要做好,并且客户端开socket侦听,真心的说不赞成。
既然socket这个方案不赞成,那解决问题的办法就是由客户端不间断的想服务器发送请求查询数据信息。这个方案的好处是不需要服务器端去维护什么数据表之类的,坏处也很明显,所谓不间断自然还是有时间间隔的,间隔多少?太长,信息不及时,太短,不仅仅浪费网络带宽,更浪费服务器资源。
从目前的情况来说,signalR是相对来说最合理的方案了,建议使用。
至于其它的推送方案,我想也无外乎是使用定时的不间断请求或i类似signalR来达成目的的。
园豆:5724
园豆:44886
既然你要最适合的解决方案,我的经验是看预算。
通常的Winform客户端,与服务器的关系,大部分是与数据库服务器的关系。
1、如果是小规模应用,项目费用低于50万,客户端低于100个来说。
可以考虑直接用计时器轮询数据库的方式。
2、如果是三层应用,Client &--&Application &--&Database,则应该你已经在Client 和Application之间有通讯机制的建立,但有可能还是类似Client to Database一样,必须客户端主动询问,无法由服务端发出的。
3、不管是使用WCF还是SOCKET或是signalR,这本质上是另外一件事,而这事其实真心不简单,要实现可能手快一点,半小时~半天可能就实现了,但是出错处理,多线程处理,错误调试,最终有可能陷这里面一个月不止。
类似问题很多ERP客户问过我,希望在系统里面实现简单QQ的,基本被我用成本击退了。
因为他们以为是顺手,我以为是10万。
说得有点乱了,
1、Client to Database, 这是最简单的。 加一个功能,不考虑服务器承载能力,加一个功能只需要考虑UI,快的话不用一天,相对于项目成本(超过30天),可以说基本没有变化。
2、Client to Server communication + Client to Database 这是两件事
Client to Server Communication 是一个需要学习的课题,相对于Client to Database,需要了解更多底层,另外调试很麻烦。
园豆:25743
你好,我的项目中使用的websocket技术。我感觉还是比较靠谱。
&&&您需要以后才能回答,未注册用户请先。

我要回帖

更多关于 客户端消息推送的原理 的文章

 

随机推荐