我看到了一个关于如何制作C#中的异步通信的教程
但是我只能一对一的聊天,我想知道怎么和多台电脑聊天,
我可以在不使用服务器的情况下存档吗?我不知道该怎么做,因为我是C#的新手。
提前感谢
发布于 2014-02-15 12:39:25
我想你被“服务器”这个词搞错了。服务请求的不是web服务器,而是顺序计算机(甚至是应用程序)。因此,对于您的多用户聊天,您需要创建2种应用程序-服务器和客户端。服务器将监听客户端并回复它们。通常,只有一个服务器和许多客户端。我建议您开始编写简单的服务器/客户端程序,然后改进它们。创建服务器,这将只为一个用户在时间。它将监听本地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));
}接下来要做的是为服务器实现线程/异步:)
https://stackoverflow.com/questions/21778031
复制相似问题