我认为你对“服务器”这个词有点误解。它不是Web服务器,它是服务请求的序数计算机(甚至应用程序)。 因此,对于多用户聊天,您需要创建两种应用程序 - 服务器和客户端。服务器将监听客户端并回复它们。通常,只有一个服务器和许多客户端。 我建议你开始编写简单的服务器/客户端程序,然后改进它们。 创建服务器,该服务器每次只能为1个用户服务。它将侦听本地IP上的特定端口。我用 的 任务 强> 简化程序。
byte[] ba = new byte[1024]; new Task(() => { Output("Going to listen to messages..."); Socket listeningS = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); // Listening to local address. You should listen to external IP for real server IPEndPoint ep = new IPEndPoint(IPAddress.Any, port); listeningS.Bind((EndPoint)ep); // One and only client at a time :) listeningS.Listen(1); while (isRunning) { // Accept client, receive data and send it back Socket clientS = listeningS.Accept(); int total = clientS.Receive(ba, 0, ba.Length, SocketFlags.None); total = clientS.Send(ba, 0, total, SocketFlags.None); // Client will open new connection (but later it is possible to use same) clientS.Shutdown(SocketShutdown.Both); clientS.Close(); } }).Start();
然后从客户端应用程序开始 - 这是最简单的部分 - 只需连接,发送和接收数据。
byte[] ba = Encoding.UTF8.GetBytes(message); Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); s.Connect(IPAddress.Loopback, port); total = s.Send(ba, SocketFlags.None); total = s.Receive(ba, 0, ba.Length, SocketFlags.None); if (total > 0) { Output(Encoding.UTF8.GetString(ba, 0, total)); }
接下来你应该做的是为你的服务器实现线程/异步:)