C#使用Socket实现服务器与多个客户端通信(简单的聊天系统)

本文介绍如何使用C#的Socket编程实现一个简单的多用户聊天系统。当一个用户发言时,服务器会接收到信息,并通过循环将此信息广播给所有已连接的客户端,不包括发送者本身。提供了详细的Server端和client端代码示例,以及代码下载链接。
摘要由CSDN通过智能技术生成
扩展:
由于server端是存储了所有server与client的连接对象,因此我们是可以基于此demo的基础上实现聊天系统:

* 每当一个与用户发言时,是由server接收到的某个用户的发言信息的,此时服务器端可以通过循环发送该用户发送的信息给每个已经连接连接的用户(排除发送者)。

Server端代码:

class Program
{
    //创建一个和客户端通信的套接字
    static Socket SocketWatch = null;
    //定义一个集合,存储客户端信息
    static Dictionary<string, Socket> ClientConnectionItems = new Dictionary<string, Socket> { };

    static void Main(string[] args)
    {
        //端口号(用来监听的)
        int port = 6000;

        //string host = "127.0.0.1";
        //IPAddress ip = IPAddress.Parse(host);
        IPAddress ip = IPAddress.Any;

        //将IP地址和端口号绑定到网络节点point上  
        IPEndPoint ipe = new IPEndPoint(ip, port);

        //定义一个套接字用于监听客户端发来的消息,包含三个参数(IP4寻址协议,流式连接,Tcp协议)  
        SocketWatch = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
        //监听绑定的网络节点  
        SocketWatch.Bind(ipe);
        //将套接字的监听队列长度限制为20  
        SocketWatch.Listen(20);


        //负责监听客户端的线程:创建一个监听线程  
        Thread threadwatch = new Thread(WatchConnecting);
        //将窗体线程设置为与后台同步,随着主线程结束而结束  
        threadwatch.IsBackground = true;
        //启动线程     
        threadwatch.Start();

        Console.WriteLine("开启监听......");
        Console.WriteLine("点击输入任意数据回车退出程序......");
        Console.ReadKey();

        SocketWatch.Close();

        //Socket serverSocket = null;

        //int i=1;
        //while (true)
        //{
        //    //receive message
        //    serverSocket = SocketWatch.Accept();
        //    Console.WriteLine("连接已经建立!");
        //    string recStr = "";
        //    byte[] recByte = new byte[4096];
        //    int bytes = serverSocket.Receive(recByte, recByte.Length, 0);
        //    //recStr += Encoding.ASCII.GetString(recByte, 0, bytes);
        //    recStr += Encoding.GetEncoding("utf-8").GetString(recByte, 0, bytes);

        //    //send message
        //    Console.WriteLine(recStr);

        //    Console.Write("请输入内容:");
        //    string sendStr = Console.ReadLine();

        //    //byte[] sendByte = Encoding.ASCII.GetBytes(sendS
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值