·¢²©ÎÄ
¾Û²ÝÌÃ

daodao.blog.chinaunix.net

   
¸öÈË×ÊÁÏ
  • ²©¿Í·ÃÎÊ£º1536530
  • ²©ÎÄÊýÁ¿£º423
  • ²©¿Í»ý·Ö£º10217
  • ²©¿ÍµÈ¼¶£ºÉϽ«
  • ×¢²áʱ¼ä£º2004-10-11 22:10:25
¶©ÔÄÎҵIJ©¿Í
  • ¶©ÔÄ
  • ¶©Ôĵ½Ïʹû
  • ¶©Ôĵ½×¥Ïº
  • ¶©Ôĵ½Google
×ÖÌå´óС£º´ó ÖРС²©ÎÄ
·ÖÀࣺ C££

Ò»£®Ç°ÑÔ£º

¡¡¡¡P2P£¬¼´Ó¢ÎÄPeer-to-PeerµÄËõд£¬ÖÐÒëΪ¶ÔµÈ»¥Áª»òµã¶Ôµã¼¼Êõ¡£½²µ½P2P£¬ÈËÃǾͻáÏëÆðNapster£¬NapsterÈÃÈËÃÇÈÏʶµ½ÁËP2P¼¼ÊõµÄÍþÁ¦£¬P2P¼¼ÊõÒ²¾Íͨ¹ýNapster½øÈëÁË´ó¶àÊýÓû§µÄÊÓÒ°£¬NapsterµÄÒôÀÖÎļþ½»»»¹¦ÄÜÊÇP2PµÄÒ»¸öÖ÷ÒªÓ¦Óá£P2P¼¼Êõ¿ÉÒÔÈÃÓû§¿ÉÒÔÖ±½ÓÁ¬½Óµ½ÆäËûÓû§µÄ¼ÆËã»ú£¬½øÐÐÎļþ¹²ÏíÓë½»»»¡£Í¬Ê±P2PÔÚÉî¶ÈËÑË÷¡¢·Ö²¼¼ÆË㡢Эͬ¹¤×÷µÈ·½ÃæÒ²´óÓÐÓÃ;¡£

¡¡¡¡¼òµ¥µØËµ£¬P2P¾ÍÊÇÒ»ÖÖÓÃÓÚ²»Í¬PCÓû§Ö®¼ä£¬²»¾­¹ýÖмÌÉ豸ֱ½Ó½»»»Êý¾Ý»ò·þÎñµÄ¼¼Êõ£¬ËüÔÊÐíInternetÓû§Ö±½ÓʹÓöԷ½µÄÎļþ¡£Ã¿¸öÈË¿ÉÒÔÖ±½ÓÁ¬½Óµ½ÆäËûÓû§µÄ¼ÆËã»ú£¬²¢½øÐÐÎļþµÄ½»»»£¬¶ø²»ÐèÒªÁ¬½Óµ½·þÎñÆ÷ÉÏÔÙ½øÐÐä¯ÀÀÓëÏÂÔØ¡£ÒòΪÏû³ýÁËÖм价½Ú£¬P2P¼¼ÊõʹµÃÍøÂçÉϵŵͨ±äµÃ¸üÈÝÒס¢¸üÖ±½Ó¡£P2P¸Ä±äÁËInternetÏÖÔÚµÄÒÔ´óÍøÕ¾ÎªÖÐÐĵÄ״̬¡¢ÖØ·µ"·ÇÖÐÐÄ»¯"£¬²¢°ÑȨÁ¦½»»¹¸øÓû§¡£´ÓijÖÖÒâÒåÉϽ²£¬P2PÌåÏÖÁËInternetµÄ±¾ÖÊ¡£ÔÚÍøÂçÉÐδ·¢Õ¹³ÉΪÏÖÔÚµÄWeb֮ǰ£¬ÍøÃñ¾ÍÊÇÀûÓÃËùνµÄ"²¼¸æ°å"µÈÇþµÀ±Ë´ËÖ±½Ó½»»»ÐÅÏ¢ºÍÎļþ¡£

¡¡¡¡Ä¿Ç°InternetµÄ´æ´¢Ä£Ê½ÊÇ"ÄÚÈÝλÓÚÖÐÐÄ"£¬¶øP2P¼¼ÊõµÄÔËÓý«Ê¹InternetÉϵÄÄÚÈÝÏò±ßÔµÒÆ¶¯¡£Õ⽫´øÀ´ÒÔϸı䣺Ê×ÏÈ£¬¿Í»§²»ÔÙÐèÒª½«ÎļþÉÏ´«µ½·þÎñÆ÷£¬¶øÖ»ÐèҪʹÓÃP2PÓëÆäËû¼ÆËã»ú½øÐй²Ïí£»Æä´Î£¬Ê¹ÓÃP2P¼¼ÊõµÄ¼ÆËã»ú²»ÐèÒª¹Ì¶¨µÄIPµØÖ·ºÍÓÀ¾ÃµÄInternetÁ¬½Ó£¬ÕâʹµÃÕ¼Óм«´ó±ÈÀýµÄ²¦ºÅÉÏÍøÓû§Ò²¿ÉÒÔÏíÊÜP2P´øÀ´µÄ±ä¸ï¡£

¡¡¡¡Àí½âP2P¼¼Êõ·½ÃæµÄ×îºÃ·½·¨ÊÇ×Ðϸ¹Û²ì²¢Àí½âÒ»¸öʵ¼ÊµÄP2PÓ¦ÓóÌÐò¡£C#×÷Ϊ΢Èí.NetÕ½ÂÔµÄÖØÒªÆå×Ó£¬¶ÔÍøÂç±à³ÌÌṩÁ˺ܺõÄÖ§³ÖºÍÓÅ»¯¡£±¾ÎľÍͨ¹ýÒ»¸ö³ÌÐò£¬Ïò´ó¼Ò½éÉÜÒ»ÏÂC#ϵÄP2P±à³ÌµÄ·½·¨ºÍʵÏÖ»úÀí¡£±¾ÎĵÄÕâ¸ö³ÌÐòËäÈ»²»ÊǺÜÓÐÓ㬵«È´ºÜÖ±¹ÛµØ¸ø³öÁËP2P£¨µã¶Ôµã£©±à³ÌÒÔ¼°Ì×½Ó¿Ú±à³ÌµÄһЩ»ù±¾ÖªÊ¶ºÍ¸ÅÄî¡£ËüÊǽ¨Á¢ÔÚTcpListenerÒÔ¼°TcpClientÕâÁ½¸öÀà»ù´¡Éϵ쬳ýÍ⻹ÓÐÏàÓ¦µÄÊäÈëºÍÊä³ö¿ØÖÆ¡£ÊµÏÖµÄÔ­ÀíÒ²±È½Ï¼òµ¥£¬µ«ÊÇÓõ½ÁËP2P¼¼ÊõÖØ·µ"·ÇÖÐÐÄ»¯"µÄ»ù±¾Ô­Ôò¡£¼òÑÔÖ®£¬ÓÃÕâ¸ö³ÌÐò¿ÉÒÔÔÚÍøÂçÖз¢ËÍ¡¢½ÓÊÜÐÅÏ¢£¬ÈκÎһ̨¼ÆËã»ú¼È¿ÉÒÔ×÷Ϊ·þÎñÆ÷¶Ë£¬ÓÖ¿ÉÒÔ×÷Ϊ¿Í»§¶Ë¡£³ÌÐò¹²Óõ½ÁËËĸöÀࣺһ¸öListenerÀࣨÓÃÀ´¼àÌýеÄÁ¬½Ó£©¡¢Ò»¸öSenderÀࣨÓÃÀ´·¢ËÍÐÅÏ¢£©¡¢Ò»¸öInputhandlerÀࣨÓÃÀ´¿ØÖÆÊäÈ룩¡¢Ò»¸öInitializeÀࣨÓÃÀ´Íê³É³õʼ»¯¹¤×÷£©¡£ÏÂÃæ£¬ÎÒÏȸø´ó¼Ò½éÉÜÒ»ÏÂÕâËĸöÀ࣬×îºóÔÙ¸ø³ö³ÌÐòµÄ¾ßÌåʵÏÖ·½·¨¡£

¡¡¡¡¶þ£®»ù±¾Àà½éÉÜ£º

¡¡¡¡1£®ListenerÀࣺ

¡¡¡¡ListenerÀàÊÇÓÃÀ´¼àÌýеÄÁ¬½Ó¡£µ±ËüµÄÒ»¸ö¶ÔÏó±»½¨Á¢²¢¿ªÆôºó£¬¸Ã¶ÔÏó¾Í¿ªÊ¼²»¶Ï¼àÌýÀ´×ÔÍøÂçÖеÄÁ¬½ÓÇëÇó¡£Ò»µ©ÓÐÁËÒ»¸öÁ¬½ÓÇëÇ󣬸öÔÏó¾ÍÉè·¨½¨Á¢Á¬½Ó²¢È¡µÃËüµÄ×Ö½ÚÁ÷½ø¶ø×ª»¯³É×Ö·û´®ÏÔʾÔÚ¿ØÖÆÌ¨ÖС£µ±Ò»¸öÁ¬½Ó½áÊøºó£¬¸Ã¶ÔÏó¾Í¼ÌÐø½øÐмàÌýÀ´×ÔÍøÂçÖеÄÁ¬½ÓÇëÇó¡£

¡¡¡¡´úÂëÒÔ¼°×¢ÊÍÈçÏ£º

namespace P2PTest
{
¡¡using System;
¡¡using System.Net.Sockets;
¡¡using System.Threading;

¡¡public class Listener
¡¡{
¡¡¡¡private Thread th;
¡¡¡¡private TcpListener tcpl;
¡¡¡¡public bool listenerRun = true;
¡¡¡¡//listenerRunΪtrue£¬±íʾ¿ÉÒÔ½ÓÊÜÁ¬½ÓÇëÇó£¬falseÔòΪ½áÊø³ÌÐò

¡¡¡¡public Listener()//¹¹Ô캯Êý
¡¡¡¡{
¡¡¡¡¡¡th = new Thread(new ThreadStart(Listen));//н¨Ò»¸öÓÃÓÚ¼àÌýµÄÏß³Ì
¡¡¡¡¡¡th.Start();//´ò¿ªÐÂÏß³Ì
¡¡¡¡}

¡¡¡¡public void Stop()
¡¡¡¡{
¡¡¡¡¡¡tcpl.Stop();
¡¡¡¡¡¡th.Abort();//ÖÕÖ¹Ïß³Ì
¡¡¡¡}

¡¡¡¡private void Listen()
¡¡¡¡{
¡¡¡¡¡¡try
¡¡¡¡¡¡{
¡¡¡¡¡¡¡¡tcpl = new TcpListener(5656);//ÔÚ5656¶Ë¿Úн¨Ò»¸öTcpListener¶ÔÏó
¡¡¡¡¡¡¡¡tcpl.Start();
¡¡¡¡¡¡¡¡Console.WriteLine("started listening..");

¡¡¡¡¡¡¡¡while(listenerRun)//¿ªÊ¼¼àÌý
¡¡¡¡¡¡¡¡{
¡¡¡¡¡¡¡¡¡¡Socket s = tcpl.AcceptSocket();
¡¡¡¡¡¡¡¡¡¡string remote = s.RemoteEndPoint.ToString();
¡¡¡¡¡¡¡¡¡¡Byte[] stream = new Byte[80];
¡¡¡¡¡¡¡¡¡¡int i=s.Receive(stream);//½ÓÊÜÁ¬½ÓÇëÇóµÄ×Ö½ÚÁ÷
¡¡¡¡¡¡¡¡¡¡string msg = "<" + remote + ">" + System.Text.Encoding.UTF8.GetString(stream);
¡¡¡¡¡¡¡¡¡¡Console.WriteLine(msg);//ÔÚ¿ØÖÆÌ¨ÏÔʾ×Ö·û´®
¡¡¡¡¡¡¡¡}
¡¡¡¡¡¡}
¡¡¡¡¡¡catch(System.Security.SecurityException)
¡¡¡¡¡¡{
¡¡¡¡¡¡¡¡Console.WriteLine("firewall says no no to application - application cries..");
¡¡¡¡¡¡}
¡¡¡¡¡¡catch(Exception)
¡¡¡¡¡¡{
¡¡¡¡¡¡¡¡Console.WriteLine("stoped listening..");
¡¡¡¡¡¡}
¡¡¡¡}
¡¡}
}

¡¡¡¡¶ÔListen£¨£©º¯ÊýµÄ²¹³ä˵Ã÷£º

¡¡¡¡Õâ¸öº¯ÊýÊÇListenerÀàµÄºËÐIJ¿·Ö¡£¸Ãº¯ÊýÊ×Ïȱ»¹¹Ô캯Êýµ÷Óá£Ö»Òª²¼¶ûÖµlistenerRunΪtrue£¬ÎÒÃǾͿÉÒÔÔÚ¶Ë¿Ú5656´´½¨²¢¿ªÊ¼Ò»¸öTcp¼àÌý¶ÔÏóTcpListener½øÐмàÌýÍøÂçÖеÄÁ¬½ÓÇëÇ󣬶øÒ»µ©listenerRun±»ÖÃΪfalse£¬Ôò±íʾ³ÌÐò½áÊøÁË¡£ÔÚÑ­»·ÌåÄÚ²¿£¬ÎÒÃÇÏȽÓÊÜÒ»¸öÁ¬½Ó£¬ÓÃs.RemoteEndPoint»ñµÃËüµÄIPµØÖ·²¢»ñµÃÆä×Ö½ÚÁ÷¡£¸ù¾Ý»ñµÃµÄ×Ö½ÚÁ÷£¬ÎÒÃÇÓÃUTF8±àÂ뽫Ëüת»¯Îª×Ö·û´®¡£×îºó£¬ÎÒÃǾÍÔÚ¿ØÖÆÌ¨ÖÐÏÔʾ»ñµÃµÄ×Ö·û´®¡£

¡¡¡¡¶ÔÓÚcatchÓï¾ä£¬µÚÒ»¸ö¿é²¶»ñÒ»¸ö¿ÉÄÜÓÉ·À»ðǽÒýÆðµÄÀýÍâ¡£ÒòΪ¶ÔÓÚ·À»ðǽ¶øÑÔ£¬Ëü¿ÉÄÜÈÏΪÕâÊÇÒ»¸öÌØÂåÒÀľÂí»òÊÇÈ峿²¡¶¾Ê²Ã´µÄ£¬ËùÒԾͻá¾Ü¾øÍ¨¹ý¡£½â¾ö°ì·¨¾ÍÊÇÖØÐÂÅäÖ÷À»ðǽ¡£µÚ¶þ¸ö¿éÓÃÓÚ²¶»ñÒ»°ãµÄÀýÍ⣬±ÈÈçµ±ÎÒÃǵ÷ÓÃÁËstop£¨£©º¯Êýºó£¬ÎÒÃÇÏú»ÙÁËTcpListener¶ÔÏó£¬ÄǾÍ×ÔÈ»²»¿ÉÄÜÔÙ½øÐмàÌýÁË¡£

¡¡¡¡2£®SenderÀࣺ

¡¡¡¡SenderÀà¾ÍÒ»¸öº¯Êý£¬ËùÒÔÊÇÏ൱¼òµ¥µÄ¡£

¡¡¡¡´úÂëÒÔ¼°×¢ÊÍÈçÏ£º

namespace P2PTest
{
¡¡using System;
¡¡using System.IO;
¡¡using System.Net.Sockets;

¡¡public class Sender
¡¡{
¡¡¡¡public void Send(string[] aInput)
¡¡¡¡{
¡¡¡¡¡¡string stream = "";
¡¡¡¡¡¡//»ñµÃÒª·¢Ë͵ÄÐÅÏ¢
¡¡¡¡¡¡for(int i=2; i¡¡¡¡¡¡{
¡¡¡¡¡¡¡¡stream += aInput[i] + " ";
¡¡¡¡¡¡}

¡¡¡¡try
¡¡¡¡{
¡¡¡¡¡¡TcpClient tcpc = new TcpClient(aInput[1], 5656);
¡¡¡¡¡¡//ÔÚ5656¶Ë¿Úн¨Ò»¸öTcpClient¶ÔÏó
¡¡¡¡¡¡NetworkStream tcpStream = tcpc.GetStream();

¡¡¡¡¡¡StreamWriter reqStreamW = new StreamWriter(tcpStream);
¡¡¡¡¡¡reqStreamW.Write(stream);
¡¡¡¡¡¡reqStreamW.Flush();//·¢ËÍÐÅÏ¢
¡¡¡¡¡¡tcpStream.Close();
¡¡¡¡¡¡tcpc.Close();
¡¡¡¡}
¡¡¡¡catch(Exception)
¡¡¡¡{
¡¡¡¡¡¡Console.WriteLine("connection refused by target computer");
¡¡¡¡}
¡¡¡¡}
¡¡}
}

¡¡¡¡¶ÔSend£¨£©º¯ÊýµÄ²¹³ä˵Ã÷£º

¡¡¡¡Send£¨string[] aInput£©º¯Êý½«Ò»¸öÊý×é×÷Ϊ²ÎÊý¡£Êý×éµÄµÚÒ»¸öÔªËØSend£¨aInput[0]£©±ØÐë°üº¬"send"Õâ¸ö×Ö£¬·ñÔòSender¶ÔÏ󲻻ᱻ´´½¨£¨¸ü¶àÄÚÈÝÔÚInputHandlerÀàÖУ©£»µÚ¶þ¸öÔªËØ°üº¬ÁËÄ¿±ê¼ÆËã»úµÄIPµØÖ·£»Ê£ÏµľÍÊÇÒª·¢Ë͵ÄÄÚÈÝÐÅÏ¢ÁË¡£

¡¡¡¡ÔÚtry¿éÖУ¬ÎÒÃǸù¾ÝÔ¶³Ì¼ÆËã»úµÄIPµØÖ·ÔÚ¶Ë¿Ú5656£¨ÒªÈ·±£¶Ë¿ÚºÅͳһ£©´´½¨ÁËÒ»¸öTcpClient¶ÔÏó¡£È»ºó£¬ÎÒÃǽ¨Á¢Ò»¸öNetworkStreamºÍÒ»¸öStremWriter¶ÔÏóÀ´·¢ËÍÎÒÃǵÄÐÅÏ¢¡£ÔÚcatch¿éÖУ¬ÎÒÃÇÓÃËüÀ´²¶»ñÒ»°ãµÄÀýÍ⣬±ÈÈçÔ¶³Ì¼ÆËã»ú¾Ü¾øÁ¬½ÓÇëÇó¡¢ÍøÂ粻ͨʲôµÄ¡£

¡¡¡¡3£®InputHandlerÀࣺ

¡¡¡¡InputHandlerÀàÖ÷ÒªÓÃÀ´¿ØÖÆÓû§ÊäÈë¡£

¡¡¡¡´úÂëÒÔ¼°×¢ÊÍÈçÏ£º

namespace P2PTest
{
¡¡using System;

¡¡public class InputHandler
¡¡{
¡¡¡¡public bool appRun = true;//µ±appRunΪfalseʱ£¬³ÌÐò½áÊø
¡¡¡¡public InputHandler()
¡¡¡¡{
¡¡¡¡¡¡Console.WriteLine("type help for a list of commands.");
¡¡¡¡¡¡Input();
¡¡¡¡}

¡¡¡¡private static Listener li;//Ò»¸ö¾²Ì¬µÄListener¶ÔÏó
¡¡¡¡private string inparam;
¡¡¡¡private string[] aInput;//Êý×éaInputÓÃÓÚ½ÓÊÜÓû§ÊäÈëµÄÐÅÏ¢

¡¡¡¡public void Input()
¡¡¡¡{
¡¡¡¡¡¡while(appRun)
¡¡¡¡¡¡{
¡¡¡¡¡¡¡¡inparam = Console.ReadLine();
¡¡¡¡¡¡¡¡aInput = inparam.Split(' ');
¡¡¡¡¡¡¡¡//½«inparam·Ö¸îµÄÄ¿µÄÊÇΪÁË»ñµÃ×Ö·û´®ÖеĵÚÒ»¸ö×Ö£¬´Ó¶øÖ´ÐÐÒÔϲ»Í¬µÄÃüÁî
¡¡¡¡¡¡¡¡switch(aInput[0])
¡¡¡¡¡¡¡¡{
¡¡¡¡¡¡¡¡¡¡case "send"://Èç¹ûÊÇ"send"£¬Ôòн¨Ò»¸öSender¶ÔÏó²¢·¢ËÍÐÅÏ¢
¡¡¡¡¡¡¡¡¡¡¡¡Sender se = new Sender();
¡¡¡¡¡¡¡¡¡¡¡¡se.Send(aInput);
¡¡¡¡¡¡¡¡¡¡¡¡break;
¡¡¡¡¡¡¡¡¡¡case "start"://Èç¹ûÊÇ"start"£¬ÔòеĿªÊ¼¼àÌý
¡¡¡¡¡¡¡¡¡¡¡¡try
¡¡¡¡¡¡¡¡¡¡¡¡{
¡¡¡¡¡¡¡¡¡¡¡¡¡¡li.listenerRun = false;
¡¡¡¡¡¡¡¡¡¡¡¡¡¡li.Stop();
¡¡¡¡¡¡¡¡¡¡¡¡}
¡¡¡¡¡¡¡¡¡¡¡¡catch(NullReferenceException)
¡¡¡¡¡¡¡¡¡¡¡¡{
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡;
¡¡¡¡¡¡¡¡¡¡¡¡}
¡¡¡¡¡¡¡¡¡¡¡¡finally
¡¡¡¡¡¡¡¡¡¡¡¡{¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡li = new Listener();
¡¡¡¡¡¡¡¡¡¡¡¡}
¡¡¡¡¡¡¡¡¡¡¡¡break;
¡¡¡¡¡¡¡¡¡¡case "stop"://Èç¹ûÊÇ"stop"£¬ÔòÍ£Ö¹¼àÌý
¡¡¡¡¡¡¡¡¡¡¡¡try
¡¡¡¡¡¡¡¡¡¡¡¡{
¡¡¡¡¡¡¡¡¡¡¡¡¡¡li.listenerRun = false;
¡¡¡¡¡¡¡¡¡¡¡¡¡¡li.Stop();
¡¡¡¡¡¡¡¡¡¡¡¡}
¡¡¡¡¡¡¡¡¡¡¡¡catch(NullReferenceException)
¡¡¡¡¡¡¡¡¡¡¡¡{
¡¡¡¡¡¡¡¡¡¡¡¡¡¡;
¡¡¡¡¡¡¡¡¡¡¡¡}
¡¡¡¡¡¡¡¡¡¡¡¡break;
¡¡¡¡¡¡¡¡¡¡case "exit"://Í˳ö³ÌÐò
¡¡¡¡¡¡¡¡¡¡¡¡try
¡¡¡¡¡¡¡¡¡¡¡¡{
¡¡¡¡¡¡¡¡¡¡¡¡¡¡li.listenerRun = false;
¡¡¡¡¡¡¡¡¡¡¡¡¡¡li.Stop();
¡¡¡¡¡¡¡¡¡¡¡¡}
¡¡¡¡¡¡¡¡¡¡¡¡catch(NullReferenceException)
¡¡¡¡¡¡¡¡¡¡¡¡{
¡¡¡¡¡¡¡¡¡¡¡¡¡¡;
¡¡¡¡¡¡¡¡¡¡¡¡}
¡¡¡¡¡¡¡¡¡¡¡¡finally
¡¡¡¡¡¡¡¡¡¡¡¡{
¡¡¡¡¡¡¡¡¡¡¡¡¡¡appRun = false;
¡¡¡¡¡¡¡¡¡¡¡¡}
¡¡¡¡¡¡¡¡¡¡¡¡break;
¡¡¡¡¡¡¡¡¡¡case "help"://ÏÔʾ°ïÖúÐÅÏ¢
¡¡¡¡¡¡¡¡¡¡¡¡¡¡Console.WriteLine("Commands:");
¡¡¡¡¡¡¡¡¡¡¡¡¡¡Console.WriteLine("start: starts the listener");
¡¡¡¡¡¡¡¡¡¡¡¡¡¡Console.WriteLine("stop: stops the listener if started");
¡¡¡¡¡¡¡¡¡¡¡¡¡¡Console.WriteLine("send: send sends a message");
¡¡¡¡¡¡¡¡¡¡¡¡¡¡Console.WriteLine("exit: exits the application");
¡¡¡¡¡¡¡¡¡¡¡¡¡¡Console.WriteLine("help: you already know");
¡¡¡¡¡¡¡¡¡¡¡¡¡¡break;
¡¡¡¡¡¡¡¡¡¡default:
¡¡¡¡¡¡¡¡¡¡¡¡Console.WriteLine("Invalid command");
¡¡¡¡¡¡¡¡¡¡¡¡break;
¡¡¡¡¡¡¡¡}
¡¡¡¡¡¡}
¡¡¡¡}
¡¡}
}

¡¡¡¡¶ÔInputHandlerÀàµÄ²¹³ä˵Ã÷£º

¡¡¡¡¸ÃÀàÖÐÓÐÒ»¸ö¾²Ì¬µÄListener¶ÔÏóli£¬Ò»µ©¼ÆËã»úÔËÐд˳ÌÐò²¢Ö´ÐÐ"start"²Ù×÷£¬¸Ã¼ÆËã»ú¾Í¿ÉÒÔ³ÉÎªÍøÂçÖеķþÎñÆ÷À´¼àÌýÆäËû¼ÆËã»úµÄÁ¬½ÓÇëÇó¡£¶ø¸ÃÀàµÄºËÐIJ¿·ÖÊÇÒ»¸öswitch caseÓï¾äϵÁУ¬Í¨¹ý²»Í¬µÄ²Ù×÷£¬ÎÒÃÇ¿ÉÒÔʹ¼ÆËã»ú°çÑݲ»Í¬µÄ½ÇÉ«£º"send"²Ù×÷±íÃ÷¸Ã¼ÆËã»úÏà¶ÔÄ¿µÄ¼ÆËã»ú¶øÑÔ³ÉÁ˿ͻ§¶Ë£»¶ø"start"²Ù×÷¾Í½«¼ÆËã»ú×ÔÉíÖÃΪ·þÎñÆ÷¶Ë£¬ÕâÕýÌåÏÖÁËP2PµÄ¼ÈÊÇ·þÎñÆ÷¶ËÓÖÊǿͻ§¶ËµÄ"·ÇÖÐÐÄ»¯"µÄÔ­Ôò£»Í¬Ê±³ÌÐòÒ²ÌṩÁËһЩÆäËûµÄ¸¨Öú²Ù×÷¡£

¡¡¡¡4£®InitializeÀࣺ

¡¡¡¡InitializeÀà½øÐгÌÐòµÄ³õʼ»¯¹¤×÷£¬Ëüн¨ÁËÒ»¸öInputHandler¶ÔÏó£¬Ö»Òª¸Ã¶ÔÏóµÄ²¼¶ûÖµappRunΪtrue£¬¾ÍÒ»Ö±ÔËÐÐÖ®£¬Ö±µ½¸ÃֵΪfalse£¬³ÌÐòÍ˳ö¡£

¡¡¡¡´úÂëÒÔ¼°×¢ÊÍÈçÏ£º

namespace P2PTest
{
¡¡using System;

¡¡public class Init
¡¡{
¡¡¡¡public static void Main()
¡¡¡¡{
¡¡¡¡¡¡InputHandler ih = new InputHandler();//н¨Ò»¸öInputHandler¶ÔÏó
¡¡¡¡¡¡while(ih.appRun);//Ö±µ½ih.appRunΪfalse£¬³ÌÐòÍ˳ö
¡¡¡¡¡¡¡¡Console.WriteLine("exiting..");
¡¡¡¡}
¡¡}
}

¡¡¡¡µ½´ËΪֹ£¬ËĸöÀàÒѾ­½éÉÜÍê±Ï£¬ÎÒÏë´ó¼ÒÒ²ÔçÒѵȲ»¼°Á˰ɣ¬ÏÂÃæ¾Í¼òµ¥¸ø´ó¼Ò½éÉÜһϾßÌåʵÏÖ³ÌÐòµÄ·½·¨¡£


¡¡¡¡Èý£®ÊµÏÖ·½·¨£º

¡¡¡¡Ê×ÏÈ£¬´ò¿ªVisual Studio.Net£¬Ð½¨Ò»¸öÃûΪP2PtestµÄ¿ØÖÆÌ¨Ó¦ÓóÌÐòµÄVisual C#ÏîÄ¿£¬Í¼Ê¾ÈçÏ£º


ͼ1

¡¡¡¡Æä´Î£¬½«ÒÔÉÏËĸöÀà·Ö±ð±£´æÎªËĸöÎļþ£ºlistener.cs£¬sender.cs£¬inputHandler.cs£¬initialize.cs¡£È»ºó½«ÕâËĸöÎļþÌí¼Óµ½µ±Ç°µÄ¹¤³ÌÖУ¬Í¬Ê±°ÑÔ­ÓеÄÖ÷Îļþɾ³ý¼´¿É£¨ÒòΪÔÚinitialize.csÖÐÒѾ­ÓÐÖ÷º¯ÊýÁË£©¡£

¡¡¡¡×îºó£¬°´Ctrl+F5¼´¿ÉÖ´ÐгÌÐòÁË¡£

¡¡¡¡ÎªÁ˽øÐвâÊÔ£¬ÎÒÃÇÐèÒª´ò¿ªÁ½¸öP2Ptest³ÌÐò£¬Ò»¸ö×÷Ϊ·þÎñÆ÷¶Ë£¬ÁíÒ»¸ö×÷Ϊ¿Í»§¶Ë¡£·þÎñÆ÷¶ËµÄͼʾÈçÏ£¨´ËʱÒѾ­¿ªÊ¼¼àÌýÁË£©£º

ͼ2

¡¡¡¡¿Í»§¶ËµÄͼʾÈçÏ£¨ÊäÈëÃüÁîÐУºsend 10.85.7.79 Hello,I'm Pitt.Can you hear me??£©£º


ͼ3

¡¡¡¡ÔÙ¿´·þÎñÆ÷¶ËµÄÇé¿ö£¬Í¼Ê¾ÈçÏ£º

ͼ4

¡¡¡¡´Óͼʾ¿ÉÒÔ¿´µ½·þÎñÆ÷¶ËÒѾ­ÊÕµ½ÏûÏ¢ÁË¡£Í¬Ê±£¬Ö»Òª¿Í»§¶ËÒ²¿ªÆôÁ˼àÌý¹¦ÄÜ£¬·þÎñÆ÷¶ËÒ²¾ÍÄÜÏò¿Í»§¶Ë·¢ËÍÐÅÏ¢ÁË¡£ÕâÑùËüÃǵĹØÏµ¾Í²»ÔÙÊÇ·þÎñÆ÷£­¿Í»§»úµÄ¹ØÏµÁË£¬¶øÊÇPeer-to-PeerµÄ¹ØÏµÁË¡£

¡¡¡¡ËÄ£®×ܽ᣺

¡¡¡¡ÏÖÔÚÒ»¸öºÜ»ù±¾µÄP2PÓ¦ÓóÌÐòÒÔ¼°Íê³É£¬Í¨¹ýËü£¬ÎÒÃÇ¿ÉÒÔÀûÓÃP2P¼¼ÊõµÄ»ù±¾ÌØÐÔʵÏÖµã¶ÔµãͨÐÅ¡£Í¨¹ýÕâ¸ö³ÌÐò£¬ÎÒÏàÐÅ´ó¼Ò¶ÔC#ϵÄP2P±à³ÌÓ¦¸ÃÓÐÁË´óÖµÄÁ˽⡣¶ÔÓÚÕâ¸ö³ÌÐò£¬²»×ãµÄÒ»µãÊǹ¦ÄܱȽϼòµ¥£¬Ö»¿ÉÒÔ·¢ËÍ¡¢½ÓÊÜÐÅÏ¢£¬¶øÇÒ»¹ÊÇ»ùÓÚ¿ØÖÆÌ¨µÄ£¬¶ÁÕß¿ÉÒÔÊÔ×Å¿ª·¢³ö¹¦ÄܸüÇ¿´óµÄ»ùÓÚWindows FormsµÄP2PÓ¦ÓóÌÐò¡£

¡¡¡¡×îºó£¬±ÊÕßÏ£ÍûÄÜͨ¹ý´ËÎÄ»½Æð´ó¼Ò¶ÔP2P¼¼ÊõµÄÐËȤ¡£ÒòΪP2PÉíºóËùÔ̲Ø×ŵÄÎޱȵĴ´ÔìÁ¦Ê¹ÈËÃǶÔδÀ´»¥ÁªÍø³äÂúÁËÃÀºÃµÄã¿ã½£¬ÏÖÔÚÊÀ½ç·¶Î§µÄP2PÓ¦ÓÃÈȳ±Ò²ÊÇÒ»À˸߹ýÒ»ÀË¡£ÔÚ¿ÉÒÔÔ¤¼ûµÄδÀ´£¬Ëæ×ŶÔP2PÑо¿µÄ½øÒ»²½ÉîÈëºÍ¹Ø×¢P2PµÄȺÌåÖð½¥Ôö¶à£¬P2P±Ø½«½øÈëÒ»¸ö·ÉËÙ·¢Õ¹µÄÐÂʱÆÚ¡£

Ç×£¬Äú»¹Ã»ÓеǼ,Çë[µÇ¼]»ò[×¢²á]ºóÔÙ½øÐÐÆÀÂÛ