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

如题所述

首先建议使用一个线程向所有客户端发送消息;
在写一个方法发送消息, 方法里面需要 消息和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服务应用,安全,但是效率低(三次握手)

温馨提示:内容为网友见解,仅供参考
无其他回答

服务器像客户端推送消息C#如何实现
remoting 和socket都可以实现推送 例如:服务器段获取后,先分离出数,然后相加,然后发送给客户端。不过我那个不是C\/S的,是点对点的。补充:服务器,也称伺服器,是提供计算服务的设备。由于服务器需要响应服务请求,并进行处理,因此一般来说服务器应具备承担服务并且保障服务的能力。服务器的构成包括处...

c#如何实现多个客户端的通信(同一个服务器)
第二个方法就稍微复杂一些。但原理都一样。客户端A,链接服务器后,地址信息就保存到了服务器上。除了保持与服务器的通信外。另外开启一个 Socket,绑定到另一个端口,并且一直监听此端口。客户端B连接服务器,从服务器上获取客户端A的地址信息。把客户端A当成服务器,连接A。

C# socket服务器端 多线程客户端 如何少量使用CPU
1)开启的线程设置为后台线程 Thread t = new Thread(你的线程函数);t.IsBackground = true 2)建议你利用socket提供的异步回调 socket.BeginXXXXX() socket.EndXXXX 来实现多线程处理 --- 利用异步回调最大的好处是:(1)可以充分利用.net framework 的线程池中I\/O线程,最大限度降低CPU处理开...

c#中socket服务端编程如何发送输入的数据(ASCII码)让客户端收到
clientSocket.Send(Encoding.ASCII.GetBytes(input+ " " + DateTime.Now));

C#要怎么推送消息到客户端
取决于推送服务器和客户端,有以下两种方法:1、web app 。可以用ajax,也可以用websocketwin app 。2、这种情况做一个服务端,接受到订餐请求Socket发送到商家(商家如果在线,如果不在的话做好预备推送功能)。如果情况不允许,使用http长连接来查询 。

C# 服务器端如何保存客户端的Socket
首先,你得有一个存放SOCKET套接字的集合休,比如LIST;也就是说把每次服务器端接受连接以后返回的套接字存放在这个列表里面;定义一个方法循环检测这个列表(LIST),检测的方法为用列表里面的每个套接字向客户端发送一次数据,然后从异常捕获里面得知客户端是否断开:try { \/\/遍厉集合列表里面每个套接...

C#客户端和服务器端传递信息
printf("欢迎消息信息已经成功发送至客户端!\\n");while(1){ if(!cansend){ printf("正在等待对方发来消息...\\n");cansend=false;recv(client,receive,sizeof(receive),0);printf("***接受到的消息***\\n");printf("%s\\n",receive);printf("***结束***\\n");cansend=true;} else ...

C#中怎么向指定IP发数据
首先,socket需要一个客户端,一个服务器端。服务器端对端口进行监听,客户端像服务器端发送连接请求,服务器端对客户端进行连接。连接之后就可以发送信息了。

C# ,服务端怎么用Socket传输数据库中的表的内容到客户端数据库中(SQ...
2、一定要用,怎么用?这个就相当复杂了,不是说Socket复杂,是你要设计的通讯代码复制,可以说绝对不亚于你所写的程序,所有关键通讯代码既要有数据又要有结构。那么就将服务器端读到的数据转换成XML格式,再在前后增加标识符,如:<!DATA> XML Data <!EOF> 3、有没有可替代的方法?有,SQL ...

C#编写Socket网络应用服务。比如在线聊天的一个服务端。要怎么写?求...
实现方式3: AClient,BClient各自开启独立的Socket Server和各自一个Socket Client,也就是发送前对方的Socket Server就是开启的,这样就可以实现两个客户端独立的通信,视频聊天和语音聊天可以这样做,但是要是想让服务器知道,必须再连接到服务器并向服务器发送信息。其中第一种方式最常用,现在很多基于...

相似回答