我正在使用套接字创建一个C#聊天应用程序,用户可以连接到一个托管服务器的用户,并向其发送消息。
现在,问题在于:当用户可以向服务器发送数据,并且数据将显示在服务器中时,数据将不会显示给客户端连接到服务器的其他用户。
当前聊天是一种简单的TCP协议数据包传输。唯一的问题是将数据发送回客户端。
所以我的问题是,如何让服务器向所有客户端广播消息?
namespace Client
{
class Program
{
static Socket sck;
static void Main(string[] args)
{
sck = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPEndPoint localEndPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 1234);
sck.Connect(localEndPoint);
Console.Write("Enter Text: ");
string text = Console.ReadLine();
byte[] data = Encoding.ASCII.GetBytes(text);
sck.Send(data);
Main(args);
}
}
}
namespace Server
{
class Program
{
static byte[] Buffer { get; set; }
static byte[] formatted;
static Socket sck;
static void Main(string[] args)
{
listen();
}
public static void listen()
{
sck = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
sck.Bind(new IPEndPoint(0, 1234));
sck.Listen(1);
Socket accepted = sck.Accept();
Buffer = new byte[accepted.SendBufferSize];
int bytesRead = accepted.Receive(Buffer);
formatted = new byte[bytesRead];
for (int i = 0; i < bytesRead; i++)
{
formatted[i] = Buffer[i];
}
string strData = Encoding.ASCII.GetString(formatted);
Console.Write(strData + "\r\n");
sck.Close();
accepted.Close();
listen();
}
}
}
答案 0 :(得分:0)
Listen()侦听传入的连接请求。在服务器上,您必须保留一个连接列表,并将收到的消息分发回列表中的等待客户端。在客户端上,您必须设置代码以使用您用于连接服务器的套接字接收这些消息。这是双向的。 http://msdn.microsoft.com/en-us/library/8s4y8aff(v=vs.110).aspx
编辑:
我认为你知道回调你的Main()函数不是好习惯。如果你没有那么你应该考虑使用循环开始,并添加一些触发器来退出循环。