C# 异步通信
我看到了一个关于如何制作 但我只能一对一聊天,我想知道如何与多台电脑聊天, 我是否可以在不使用服务器的情况下存档此文件?我不知道该怎么办,因为我是C语言的新手C# 异步通信,c#,C#,我看到了一个关于如何制作 但我只能一对一聊天,我想知道如何与多台电脑聊天, 我是否可以在不使用服务器的情况下存档此文件?我不知道该怎么办,因为我是C语言的新手 提前谢谢我想您对word server没什么误解。它不是web服务器,而是为请求提供服务的普通计算机甚至应用程序。 因此,对于多用户聊天,您需要创建两种应用程序-服务器和客户端。服务器将侦听客户端并回复它们。通常,只有一台服务器和许多客户端。 我建议您开始编写简单的服务器/客户机程序,然后改进它们。 创建一个一次只为1个用户服务的服务器。
提前谢谢我想您对word server没什么误解。它不是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));
}
接下来要做的事情是为您的服务器实现threads/async:当然可以。但是试着用你的服务器聊天。或者实现XMPP客户端。我正在使用WinForm应用程序。我不知道为什么人们对我的答案投了反对票,所以我只是删除了它。对于@liran63,我很清楚每台电脑都可以是服务器。所以我的意思是。。。如果没有公用服务器,您不能有超过2台PC聊天。如果你对此有任何想法,请分享。但我已经做过了,Winforms、WPF和互联网连接的Web,根据我的经验,在没有公共服务器的情况下,我从来没有做过类似的事情。我可能错了。但OP明确表示“与多台PC聊天”。“一对一”,我很确定他指的是两台电脑聊天。我说的对吗,OP?@chris_techno25你可以不用一个普通的服务器,通过一个环或类似网络的设置来运行。不过,正如您可能建议的那样,让发起聊天的客户端作为服务器更容易。@C.Evenhuis谢谢您,先生。对你的评论投了赞成票:是的,你完全正确。但我认为没有人会建议使用环形拓扑,尤其是在聊天时。这将导致通信的大量延迟。这就是我提出最常见答案的原因:我希望你能抓住重点,继续前进: