C#通讯中,服务器端怎么样同时给每个客户端发送消息?

klzxg2008 2006-11-01 09:06:45
C#通讯中,服务器端怎么样同时给每个客户端发送消息?
...全文
275 7 打赏 收藏 举报
写回复
7 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
zhongwanli 2006-11-02
  • 打赏
  • 举报
回复
.NET Remoting 事件消息订阅可以满足楼主的需要
Knight94 2006-11-02
  • 打赏
  • 举报
回复
to C#通讯中,服务器端怎么样同时给每个客户端发送消息?

什么方式的通讯?

udp可以广播
tcp只能逐个发
klzxg2008 2006-11-02
  • 打赏
  • 举报
回复
发一些主要的代码,帮忙看一下。刚才的方法我试了,还是不行。
private void StartListening()
{
string hostname = Dns.GetHostName();
IPAddress serverIP = Dns.Resolve(hostname).AddressList[0];
int Port = 6680;
Listener = new Socket(AddressFamily.InterNetwork,
SocketType.Stream, ProtocolType.Tcp);
IPEndPoint serverhost = new IPEndPoint(IPAddress.Any,Port);
Listener.Bind(serverhost);
Listener.Listen(50);
try
{
while (!ShuttingDown)
{
// allDone.Reset();
clientSocket = Listener.Accept();
sockList.Add(clientSocket);
ns = new NetworkStream(clientSocket);
receiver = new Thread(new ThreadStart(ReceiveData));
receiver.Start();
// allDone.WaitOne();
}
}
catch (Exception ex)
{
MessageBox.Show(ex.StackTrace.ToString());
}
}

public void ReceiveData()
{
try
{
while(true)
{
int recv = ns.Read(data,0,data.Length);
if(recv >0)
{
this.OnReceiveChangeHandler(data,EventArgs.Empty);
}
}
}
catch(SocketException ex)
{
MessageBox.Show("Unable to connect to server!"+"\\n"+
ex.ToString());
this.close();
}
}

public bool SendMessage(Message message)
{
try
{
string tt = message.node_name;
byte[] data = message.GetBytes();
this.size = data.Length;
ns.Write(data,0,size);
return true;
}
catch(Exception e)
{
MessageBox.Show(e.StackTrace.ToString());
this.close();
return false;
}
}
klzxg2008 2006-11-02
  • 打赏
  • 举报
回复
to :Knight94(愚翁)
你是说每次Accept方法返回一个Socket对象的时候,因该赋给一个局部变量么?
zhuds 2006-11-02
  • 打赏
  • 举报
回复
你可以把客户端保存在一个数组里,然后在一个个发送信息!
Knight94 2006-11-02
  • 打赏
  • 举报
回复
to 另外,当第二个客户端连接服务器时,第一个客户端便不能正常与服务器通讯,为什么呢?

这个问题,估计是全局变量和局部变量的问题,你可能在通过AcceptSocket方法获得一个局部Socket替换了类的成员,这样会造成前面Accept的Socket对象被后面Accept的替换掉,从而只能响应最后一个Socket请求。
klzxg2008 2006-11-02
  • 打赏
  • 举报
回复
但是要是异步通讯的代码中,服务器端怎样获得客户端的地址信息呢?
另外,当第二个客户端连接服务器时,第一个客户端便不能正常与服务器通讯,为什么呢?
发帖
C#

10.8w+

社区成员

.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
帖子事件
创建了帖子
2006-11-01 09:06
社区公告

让您成为最强悍的C#开发者