如题:
当前实现了,客户机给服务机发消息,服务器回应消息.
如何实现服务器给所有客户机发通知消息?
------解决思路----------------------
........既然客户端和服务器已经连接上了 那么服务器端就有了 每个客户端的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();// 再次开始异步
大概是这样,怎么给客户机主动发消息?
........既然客户端和服务器已经连接上了 那么服务器端就有了 每个客户端的SOCKET对象 ,把这些对象存起来,循环发送就是!
LZ上你的代码吧 我给你说说
TcpClient client = this.EndAcceptTcpClient(handler);/
把这个client 存到字典中,然后循环发送就这个字典Dictionary
服务器端有Send方法 直接把client 循环出来
------解决思路----------------------
您好..我还是使用的你那个帖子的代码,整个过程依然没完全搞弄,不知道用你那个代码可否实现给客户机群发?
它完成了客户端连接服务器、保持长连接、双向通讯。