C# socket 服务器端 如何向所有的客户端发送消息(服务器拥有客户端的socket)?
1个回答
展开全部
首先建议使用一个线程向所有客户端发送消息;
在写一个方法发送消息, 方法里面需要 消息和socket 参数;
Thread tSend= new Thread(SendAll);
private void SendAll()
{
//遍历所有的Socket,调用Send(string msg,Socket socket)方法
//不知道你的Socket放到哪里,如果放到集合就遍历集合挨个调用
}
private void Send(string msg,Socket socket)
{
byte[] buffer = Encoding.Default.GetBytes(msg);
socket.Send(buffer);
}
在写一个方法发送消息, 方法里面需要 消息和socket 参数;
Thread tSend= new Thread(SendAll);
private void SendAll()
{
//遍历所有的Socket,调用Send(string msg,Socket socket)方法
//不知道你的Socket放到哪里,如果放到集合就遍历集合挨个调用
}
private void Send(string msg,Socket socket)
{
byte[] buffer = Encoding.Default.GetBytes(msg);
socket.Send(buffer);
}
追问
那么 这样客户端如何 接受了 客户端不知道服务器什么时候发送的啊?另外请教一下这样的方式应该属于TCP传递 是吗?
追答
客户端在连接到服务器的时候 ,开启一个线程用来监听接收服务端发送来的消息(客户端的Socket不能关闭掉,一直保持连接状态)。
//客户端
//接收服务器发来的消息
Thread th = new Thread(Rec);
th.IsBackground = true;
th.Start();
//接收的服务器信息方法
void Rec()
{
while(true)
{
byte[] buffer = new byte[1024 * 1024];
int n = socket.Receive(buffer);//socket是连接服务器的
//读取服务端发来的消息
string msg = Encoding.Default.GetString(buffer, 0, n);
}
}
你在创建Socket的时候选择TCP方式的:
参数1目前IPV4的方式
参数2流式
参数3TCP
new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
流式Socket:
面向连接的Socket,针对于面向连接的TCP服务应用,安全,但是效率低(三次握手)
51IDC
2024-12-01 广告
2024-12-01 广告
作为上海锐速网络科技有限公司的一员,我们专注于构建高效、稳定的服务器后台系统。我们运用先进的技术架构和严格的开发流程,确保服务器后台能够应对各种业务挑战,提供稳定可靠的数据处理能力和服务支持。同时,我们不断优化系统性能,提高安全性和可维护性...
点击进入详情页
本回答由51IDC提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询