⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 imessagereceiver.cs

📁 C常用算法程序集,一部比较经典的程序算法合集
💻 CS
字号:
using System;
using System.Collections.Generic;
using System.Text;
using System.Net;
using System.Threading;
using System.Net.Sockets;
using System.IO;

namespace mychat1
{
    public delegate void MessageReceivedEventHandler(string msg);
    public delegate void ClientConnectedEventHandler(IPEndPoint endPoint);
    public delegate void ConnectionLostEventHandler(string info);
    public delegate void PortNumberReadyEventHandler(int portNumber);

    public interface IMessageReceiver
    {
        event MessageReceivedEventHandler MessageReceived; // 接收到发来的消息
        event ConnectionLostEventHandler ClientLost;			// 远程主动断开连接
        event ClientConnectedEventHandler ClientConnected;	// 远程连接到了本地
        void StartListen();			// 开始侦听端口
        void StopListen();			// 停止侦听端口
    }

    public class MessageReceiver : IMessageReceiver
    {

        public event MessageReceivedEventHandler MessageReceived;
        public event ConnectionLostEventHandler ClientLost;
        public event ClientConnectedEventHandler ClientConnected;

        // 当端口号Ok的时候调用 -- 需要告诉用户界面使用了哪个端口号在侦听
        // 这里是业务上体现不出来,在实现中才能体现出来的
       // public event PortNumberReadyEventHandler PortNumberReady;

        private Thread workerThread;
        private TcpListener listener;

        public MessageReceiver()
        {
            ((IMessageReceiver)this).StartListen();
        }

        // 开始侦听:显示实现接口
        void IMessageReceiver.StartListen()
        {
            ThreadStart start = new ThreadStart(ListenThreadMethod);
            workerThread = new Thread(start);
            workerThread.IsBackground = true;
            workerThread.Start();
        }

        // 线程入口方法
        private void ListenThreadMethod()
        {
            try
            {
                IPAddress localIp = IPAddress.Any;
                listener = new TcpListener(localIp, 9053);
                listener.Start();
            }
            catch
            {
              
            }

            // 获取端口号
         IPEndPoint endPoint = listener.LocalEndpoint as IPEndPoint;
           /* int portNumber = endPoint.Port;
            if (PortNumberReady != null)
            {
                PortNumberReady(portNumber);		// 端口号已经OK,通知用户界面

            }*/
            
            while (true)
            {
                TcpClient remoteClient;
                try
                {
                    remoteClient = listener.AcceptTcpClient();
                }
                catch
                {
                    break;
                }
                if (ClientConnected != null)
                {
                    // 连接至本机的远程端口
                    endPoint = remoteClient.Client.RemoteEndPoint as IPEndPoint;
                    ClientConnected(endPoint);		// 通知用户界面远程客户连接
                }

                Stream streamToClient = remoteClient.GetStream();
                byte[] buffer = new byte[1024];

              /*  while (true)
                {
                    try
                    {
                        int bytesRead = streamToClient.Read(buffer, 0, 1024);
                        if (bytesRead == 0)
                        {
                            throw new Exception("客户端已断开连接");
                        }
                        string msg = Encoding.Unicode.GetString(buffer, 0, bytesRead);

                        if (MessageReceived != null)
                        {
                            MessageReceived(msg);		// 已经收到消息
                        }
                    }
                    catch (Exception ex)
                    {
                        if (ClientLost != null)
                        {
                            ClientLost(ex.Message);		// 客户连接丢失
                            break;							// 退出循环
                        }
                    }
                } */
            }
        }


        // 停止侦听端口
        public void StopListen()
        {
            try
            {
                listener.Stop();
                listener = null;
                workerThread.Abort();
            }
            catch { }
        }
    }


    
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -