连接建立后如何从Server(使用连接列表)向Client发送命令?

我将这两个类作为我的服务器应用程序(桌面)的一部分,并且需要在建立连接后将命令发送回客户端。

当我尝试这样做:

clients[i].Send("info"); 

Send()例程( Listener.cs )是可访问的,但我有以下sintaxe错误:

在此处输入图像描述

怎么解决这个?

Listener.cs

 using System; using System.Collections.Generic; using System.Text; using System.Net; using System.Net.Sockets; class Listener { Socket s; string IP; public List clients; public delegate void ReceivedEventHandler(Listener l, Info i, string received); public event ReceivedEventHandler Received; public delegate void DisconnectedEventHandler(Listener l, Info i); public event DisconnectedEventHandler Disconnected; bool listening = false; public Listener() { clients = new List(); s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); } public bool Running { get { return listening; } } public void BeginListen(int port) { s.Bind(new IPEndPoint(IPAddress.Any, port)); s.Listen(100); s.BeginAccept(new AsyncCallback(AcceptCallback), s); listening = true; } public void StopListen() { if (listening == true) { s.Close(); } } void AcceptCallback(IAsyncResult ar) { Socket handler = (Socket)ar.AsyncState; Socket sock = handler.EndAccept(ar); Info i = new Info(sock); clients.Add(i); Console.WriteLine("New Connection: " + i.ID.ToString()); clients[i].Send("info"); sock.BeginReceive(i.buffer, 0, i.buffer.Length, SocketFlags.None, new AsyncCallback(ReadCallback), i); handler.BeginAccept(new AsyncCallback(AcceptCallback), handler); } void ReadCallback(IAsyncResult ar) { Info i = (Info)ar.AsyncState; try { int rec = i.sock.EndReceive(ar); if (rec != 0) { string data = Encoding.ASCII.GetString(i.buffer, 0, rec); Received(this, i, data); } else { Disconnected(this, i); return; } i.sock.BeginReceive(i.buffer, 0, i.buffer.Length, SocketFlags.None, new AsyncCallback(ReadCallback), i); } catch { Disconnected(this, i); i.sock.Close(); clients.Remove(i); } } } 

Info.cs

 using System; using System.Collections.Generic; using System.Text; using System.Net; using System.Net.Sockets; public class Info { public Socket sock; public Guid ID; public string RemoteAddress; public byte[] buffer = new byte[8192]; public Info(Socket sock) { this.sock = sock; ID = Guid.NewGuid(); RemoteAddress = sock.RemoteEndPoint.ToString(); } public void Send(string data) { byte[] buffer = Encoding.ASCII.GetBytes(data); sock.BeginSend(buffer, 0, buffer.Length, SocketFlags.None, new AsyncCallback((ar) => { sock.EndSend(ar); }), buffer); } } 

项目参考

 clients[i].Send("info"); 

这个说法不正确。 变量“i”指的是Info类的一个实例。 它不是列表中的整数索引。 正确的电话会议如下。

 i.Send("info");