C# Socket服务端 案例

本文提供了一个C# Socket服务端的关键代码示例,包括使用TcpListener监听客户端连接,线程池处理接收数据,以及如何与客户端进行交互。代码已经过测试,可正常运行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转载请标明出处~~
以下为Socket服务端关键代码,已测试OK     

   Thread serverThread;
        Thread clientThread;
        TcpListener serverTcp;
        TcpClient clientTcp;

#region Socket读取数据
        private void ServerStart()
        {
            //创建IPEndPoint实例
            IPEndPoint ipep = new IPEndPoint(IPAddress.Any, 6001);
            /*
            //创建一个套接字
            serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            //将所创建的套接字与IPEndPoint绑定
            serverSocket.Bind(ipep);
            //设置套接字为收听模式
            serverSocket.Listen(10);
            */
            serverTcp = new TcpListener(ipep);
            serverTcp.Start();

            while (true)
            {
                try
                {
                    //在套接字上接收接入的连接
                    while (!serverTcp.Pending())
                    {
                        Thread.Sleep(1000);
                    }
                    //clientSocket = serverSocket.Accept();
                    clientTcp = serverTcp.AcceptTcpClient();
                    //clientThread = new Thread(new ThreadStart(ReceiveData));
                    //clientThread.Start();
                    ThreadPool.QueueUserWorkItem(new WaitCallback(ReceiveData), clientTcp);
                }
                catch (Exception ex)
                {
                    MessageBox.Show("listening Error: " + ex.Message);
                }
            }
        }

        private void ReceiveData(object state)
        {
            bool keepalive = true;
            TcpClient curClientTcp = state as TcpClient;
            //TcpClient s = curClientTcp;
            //NetworkStream ns = s.GetStream();
            //StreamReader sr = new StreamReader(ns);
            //StreamWriter sw = new StreamWriter(ns);

            //Byte[] buffer = new Byte[1024];

            //根据收听到的客户端套接字向客户端发送信息
            IPEndPoint clientep = (IPEndPoint)curClientTcp.Client.RemoteEndPoint;
            //lstServer.Items.Add("Client:" + clientep.Address + "(" + clientep.Port + ")");


            string data = "";
            string clientNo = clientep.Address + "," + clientep.Port;
            ClientSockets cs = null;
            if (!CommonInfo.DicClientSocket.TryGetValue(clientNo, out cs))
            {
                cs = new ClientSockets();
                cs.ServerIP = clientep.Address.ToString();
                cs.ServerPort = clientep.Port;
                cs.ClientTcp = state as TcpClient;
                cs.Ns = cs.ClientTcp.GetStream();
                cs.Sr = new StreamReader(cs.Ns);
                cs.Sw = new StreamWriter(cs.Ns);
                cs.IfConnect = true;
                csList.Add(cs);
                //lock (locker)//锁
                //{
                //    /*添加过程*/
                //    CommonInfo.DicClientSocket.Add(clientNo, cs);
                //}

            }
            while (keepalive)
            {
                //在套接字上接收客户端发送的信息
                try
                {
                    data = cs.Sr.ReadLine();
                    if (data == "")
                        continue;
                }
                catch (Exception ex)
                {
                    //终止该线程
                    cs.CloseSocket();
                    return;
                }
                //根据信息向客户端发送数据
                if (data == null)
                    return;
            }
        }
        #endregion

转载请标明出处

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值