Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 异步通信_C# - Fatal编程技术网

C# 异步通信

C# 异步通信,c#,C#,我看到了一个关于如何制作 但我只能一对一聊天,我想知道如何与多台电脑聊天, 我是否可以在不使用服务器的情况下存档此文件?我不知道该怎么办,因为我是C语言的新手 提前谢谢我想您对word server没什么误解。它不是web服务器,而是为请求提供服务的普通计算机甚至应用程序。 因此,对于多用户聊天,您需要创建两种应用程序-服务器和客户端。服务器将侦听客户端并回复它们。通常,只有一台服务器和许多客户端。 我建议您开始编写简单的服务器/客户机程序,然后改进它们。 创建一个一次只为1个用户服务的服务器。

我看到了一个关于如何制作

但我只能一对一聊天,我想知道如何与多台电脑聊天, 我是否可以在不使用服务器的情况下存档此文件?我不知道该怎么办,因为我是C语言的新手


提前谢谢

我想您对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谢谢您,先生。对你的评论投了赞成票:是的,你完全正确。但我认为没有人会建议使用环形拓扑,尤其是在聊天时。这将导致通信的大量延迟。这就是我提出最常见答案的原因:我希望你能抓住重点,继续前进: