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

📄 clsp2p.cs

📁 P2P(Peer-to-Peer 端到端)模型是与C/S(客户/服务器)模型相对应。基于C/S的用户间通信需要由服务器中转
💻 CS
字号:
using System;
using System.Net.Sockets;
using System.IO;
using System.Threading ; 

namespace P2PSvr
{
	/// <summary>
	/// clsP2P的摘要说明。
	/// </summary>
	public class P2P
	{
		public delegate void DelgMsgListened();
		public event DelgMsgListened OnMsgListened;

		//侦听到的消息
		private string m_msgLisened;
		//远程机是否正常连接
		private bool isConnected=false;

		//创建线程,用以侦听端口号,接收信息 
		private Thread lsThread;
		//用以侦听端口号
		private TcpListener lsClient; 
		//设定标识位,判断侦听状态
		private bool isListenerNow = true; 

		//创建传送/接收的基本数据流实例 
		private NetworkStream tcpStream;
		//用以实现向远程主机传送信息
		private StreamWriter reqStreamW; 
		//用以创建对远程主机的连接 
		private TcpClient tcpClientPere;
		//用以接收远程主机传送来的数据 
		private Socket skSocket; 


		public string MsgLisened
		{
			get
			{
				return m_msgLisened;
			}
		}

		public bool Connected
		{
			get 
			{
				return isConnected;
			}
		}

		public void DisposeMe()
		{
			try
			{
				isListenerNow = false; 
				lsThread.Abort(); 
				lsThread = null; 
				lsClient.Stop (); 
				skSocket.Close(); 
				tcpClientPere.Close();
			}
			catch(Exception)
			{
				//Do nothing here
			}
		}

		public void BeginLisen()
		{
			try 
			{ 
				lsClient= new TcpListener (8877);
				lsClient.Start();
				//接受远程计算机的连接请求,并获得用以接收数据的Socket实例 
				skSocket = lsClient.AcceptSocket(); 
				//循环侦听 
				while (isListenerNow) 
				{
					//定义从远程计算机接收到数据存放的数据缓冲区 
					Byte[] stream = new Byte[80] ; 
					//接收数据,并存放到定义的缓冲区中
					int i = skSocket.Receive(stream); 
					//以指定的编码,从缓冲区中读出内容
					m_msgLisened = System.Text.Encoding.UTF8.GetString (stream);
					isConnected=true;
					OnMsgListened();
				} 
			} 
			catch (System.Security.SecurityException  ) 
			{
				isConnected=false;
			} 
		}

		public void ThreadToListen()
		{
			//初始化线程实例,单独以一个线程来进行侦听
			lsThread = new Thread (new ThreadStart(this.BeginLisen));
			//启动线程
			lsThread.Start(); 
		}

		public bool ConnectToRemote(string svrName)
		{
			try 
			{
				tcpClientPere = new TcpClient() ; 
				//向远程计算机提出连接申请
				tcpClientPere.Connect(svrName,8877);
				//如果连接申请建立,获得传送数据的数据流 
				tcpStream = tcpClientPere.GetStream();
				return true;
			} 
			catch (Exception) 
			{ 
				return false; 
			} 
		}

		public void DisConnectToRemote()
		{
			tcpClientPere.Close();
			tcpClientPere = null;
		}

		public bool SendMsg(string msgToSend)
		{
			try 
			{ 
				reqStreamW = new StreamWriter(tcpStream);
				reqStreamW.Write (msgToSend); 
				//清理当前编写器的所有缓冲区,并使所有缓冲数据写入流 
				reqStreamW.Flush ( ) ;
				return true;
			} 
				//异常处理 
			catch (Exception) 
			{ 
				return false; 
			} 		
		}
	}
}

⌨️ 快捷键说明

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