制作聊天应用程序

时间:2013-12-15 12:38:44

标签: c# sockets chat

我正在使用套接字创建一个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();
        }
    }
}

1 个答案:

答案 0 :(得分:0)

Listen()侦听传入的连接请求。在服务器上,您必须保留一个连接列表,并将收到的消息分发回列表中的等待客户端。在客户端上,您必须设置代码以使用您用于连接服务器的套接字接收这些消息。这是双向的。 http://msdn.microsoft.com/en-us/library/8s4y8aff(v=vs.110).aspx

编辑:

我认为你知道回调你的Main()函数不是好习惯。如果你没有那么你应该考虑使用循环开始,并添加一些触发器来退出循环。