C# socket 服务器端 如何向所有的客户端发送消息(服务器拥有客户端的socket)?

 我来答
石哥在拌饭
推荐于2016-04-20 · TA获得超过530个赞
知道小有建树答主
回答量:573
采纳率:100%
帮助的人:565万
展开全部
首先建议使用一个线程向所有客户端发送消息;
在写一个方法发送消息, 方法里面需要 消息和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服务应用,安全,但是效率低(三次握手)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式