<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      C#局域網通信

      最近做了個局域網通信軟件,主要是利用socket通信是基于TCP/IP的。主要功能是服務器可以向所有客戶端發送消息,客戶端也可以向服務器端發送消息。當然客戶端也可向客戶端發送消息,不過在這里因軟件沒有要求做,也沒有添加該功能。如果實現該功能只需添加以下他們之間通信的協議即可。

      服務器界面:

                 

      客戶端界面:

                  

      服務器端主要代碼:

      服務器界面代碼:

       

       public partial class Form1 : Form
          {
              public Form1()
              {
                  InitializeComponent();
                  CheckForIllegalCrossThreadCalls = false;
              }
              server s = new server();
              IPAddress ip = null;
              private void Form1_Load(object sender, EventArgs e)
              {
                  ip = Dns.Resolve(Dns.GetHostName()).AddressList[0];
                  this.txtIP.Text = ip.ToString();
                  this.s.Started += new EventHandler(s_Started);
                  this.s.Logged += new EventHandler<UserLoggedEventArgs>(s_Logged);
                  this.s.PChated += new EventHandler<PublicChatEventArgs>(s_PChated);
              }

              //向所有客戶端發送消息
              private void btnSend_Click(object sender, EventArgs e)
              {
                 string msg= "CHAT|服務器消息:|"+DateTime.Now.ToLongTimeString() + "|" +this.rtxtMsg.Text;
                  this.s.SendMessage(msg);
                  this.rtxt.AppendText("服務器消息:在" + Convert.ToDateTime(DateTime.Now.ToLongTimeString()) + " 通知:\n" + this.rtxtMsg.Text + "\n");
                  this.rtxtMsg.Text = "";
              }

              void s_PChated(object sender, PublicChatEventArgs e)
              {
                  this.rtxt.AppendText(e.UserName+" 在"+e.Time+"說: \n"+e.Msg+"\n");
              }

              void s_Started(object sender, EventArgs e)
              {
                this.rtxt.AppendText("******************服務器已啟動******************\n");
              }

              void s_Logged(object sender, UserLoggedEventArgs e)
              {
                  this.rtxt.AppendText("客戶端【 "+e.UserName + "】 已啟動!\n");
                  this.lbxUserList.Items.Clear();
                  foreach (string item in e.UserList)
                  {
                      this.lbxUserList.Items.Add(item);
                  }
              }

              //開啟服務
              private void btnStart_Click(object sender, EventArgs e)
              {

                      this.s.ip = ip;
                      this.s.port = int.Parse(this.txtPort.Text);
                      this.s.Start();
                      this.btnStart.Enabled = false;
              }

              private void rtxt_TextChanged(object sender, EventArgs e)
              {
                  this.rtxt.Focus();
                  this.rtxtMsg.Focus();
              }
          }

       

       服務器類

      namespace Server
      {
          public class server
          {
              public event EventHandler Started;
              public event EventHandler<UserLoggedEventArgs> Logged;
              public event EventHandler<PublicChatEventArgs> PChated;

              public server() { }
             
              #region 字段定義
              public IPAddress ip { get; set; }
              public int port { get; set; }
              Thread thread = null;
              private TcpListener listener;
              private Dictionary<string, Socket> userlist = new Dictionary<string, Socket>();
              #endregion

              //開啟服務
              public void Start()
              {
                  this.thread = new Thread(new ThreadStart(this.Work));
                  this.listener = new TcpListener(this.ip, this.port);
                  this.listener.Start();
                  this.thread.Start();
                  if (this.Started != null)
                  {
                      this.Started(this, new EventArgs());
                  }
              }

              public void Work()
              {
                  while (true)
                  {
                      Socket soket = this.listener.AcceptSocket();
                      Thread userThread = new Thread(
                               delegate()
                                 {
                                     ResponseClient(soket);
                                 }
                          );
                      userThread.Start();
                  }

              }

              private void ResponseClient(Socket soket)
              {
                  while (true)
                  {
                      byte[] buffer=new byte[1024*10];
                      soket.Receive(buffer);

                      string msg = Encoding.Unicode.GetString(buffer).TrimEnd('\0');
                      string[] tokens = msg.Split('|');
                      if (tokens[0]=="CONN")
                      {
                          if (this.userlist.ContainsKey(tokens[0]))
                          {
                              break;
                          }
                          else
                          {
                              this.userlist.Add(tokens[1], soket);
                          }
                          UserLoggedEventArgs e1 = new UserLoggedEventArgs();
                          e1.UserName = tokens[1];
                          e1.UserList = this.GetUserList();
                          //通知服務器界面
                          if (this.Logged!=null)
                          {
                              this.Logged(this,e1);
                          }
                      }

                      if (tokens[0]=="TS")
                      {
                          PublicChatEventArgs e1 = new PublicChatEventArgs();
                          e1.UserName = tokens[1];
                          e1.Time =Convert.ToDateTime(tokens[2]);
                          string message = "";
                          for (int i =3; i < tokens.Length; i++)
                          {
                              message += tokens[i];
                          }
                          e1.Msg = message;
                          if (this.PChated!=null)
                          {
                              this.PChated(this, e1);
                          }
                      }
                  }
              }

              //獲取客戶列表
              private List<string> GetUserList()
              {
                  List<string> list = new List<string>();
                  foreach (KeyValuePair<string,Socket> item in userlist)
                  {
                      list.Add(item.Key);
                  }
                  return list;
              }

              public void SendMessage( string message)
              {
                  foreach (KeyValuePair<string,Socket> item in userlist)
                  {
                      byte[] buffer = Encoding.Unicode.GetBytes(message.ToCharArray());
                      item.Value.Send(buffer);
                  }
              }
          }
      }

      服務器端事件參數的定義:

       

      namespace Server
      {
          public class UserLoggedEventArgs : EventArgs
          {
              public string  UserName { get; set; }
              public List<string> UserList { get; set; }
          }

          public class PublicChatEventArgs : EventArgs
          {
              public string  UserName { get; set; }
              public string  Msg { get; set; }
              public DateTime  Time { get; set; }
              public string  Font { get; set; }
              public string  FontColor { get; set; }
              public string  FontSize { get; set; }

          }
      }

      客戶端主要代碼:

      客戶端類

      namespace ClientUI
      {
         public  class ClientUI
          {
             public ClientUI() { }

             public event EventHandler Started;
             public event EventHandler<LoggedEventArgs> Logged;
             public event EventHandler<PublciChatEventArgs> PChated;

             public string clientName { get; set; }
             public string  msg { get; set; }
             public IPAddress ip { get; set; }
             public int port { get; set; }
             TcpClient client = new TcpClient();
             Stream stream;
             Thread mainThread = null;
            
             //連接服務器
             public void Connect()
             {
                 this.client.Connect(this.ip, this.port);
                 this.stream = this.client.GetStream();
                 this.clientName=Guid.NewGuid().ToString().Substring(0,10);
                 string message = "CONN|" + this.clientName;
                 this.SendMessage(message);

                 this.mainThread = new Thread(new ThreadStart(this.ResponseServer));
                 this.mainThread.Start();

                 if (this.Started!=null)
                 {
                     this.Started(this, new EventArgs());
                 }
             }

             public void ResponseServer()
             {
                 while (true)
                 {
                     byte[] buffer = new byte[1024 * 10];
                     this.stream.Read(buffer, 0, buffer.Length);
                     string message = Encoding.Unicode.GetString(buffer).TrimEnd('\0');
                     string[] tokens = message.Split('|');

                     if (tokens[0] == "CHAT")
                     {
                         PublciChatEventArgs e1 = new PublciChatEventArgs();
                         e1.UserName = tokens[1];
                         e1.Time = Convert.ToDateTime(tokens[2]);
                         string msg = "";
                         for (int i = 3; i < tokens.Length; i++)
                         {
                             msg += tokens[i];
                         }
                         e1.Msg = msg;
                         if (this.PChated!=null)
                         {
                             this.PChated(this,e1);
                         }
                     }
                 }
             }
            
             public void ChartS(string message)
             {
                this.msg="TS|"+this.clientName+"|"+DateTime.Now.ToLongTimeString()+"|"+message;
                 this.SendMessage(msg);

             }

             private void SendMessage(string message)
             {
                 byte[] buffer = Encoding.Unicode.GetBytes(message.ToCharArray());
                 this.stream.Write(buffer, 0, buffer.Length);          
             }
         
            
        
        
         }
      }

       

      客戶端參數的定義和服務器端一樣。

       

       

      posted @ 2009-12-13 01:42  Xingsoft  閱讀(10072)  評論(3)    收藏  舉報
      主站蜘蛛池模板: 亚洲中文字幕乱码一区| 成人精品色一区二区三区| 中文字幕亚洲国产精品| 亚洲av激情久久精品人| 亚洲国产中文字幕精品| 一卡2卡三卡4卡免费网站| 日韩欧美aⅴ综合网站发布| 亚洲人成网站18禁止无码| 国产精品日本一区二区不卡视频 | 武鸣县| 国模肉肉视频一区二区三区| 亚洲国产精品日韩在线| 国产短视频一区二区三区| 亚洲熟女乱色一区二区三区| 久久精品国产清自在天天线| 亚洲精品久久无码av片软件| 国产69精品久久久久99尤物| 高清精品一区二区三区| 国产精品露脸视频观看| 国产激情国产精品久久源| 国产高清自产拍AV在线| 国产四虎永久免费观看| 性男女做视频观看网站| 图片区偷拍区小说区五月 | 国产精品极品美女自在线观看免费| 你拍自拍亚洲一区二区三区| 人妻一区二区三区三区| 中国女人熟毛茸茸A毛片| 蜜桃一区二区三区在线看| 国产成人精品午夜二三区| 亚洲国产成人久久一区久久| 丰满熟女人妻一区二区三| 中文字幕自拍偷拍福利视频| 日本亚洲一区二区精品| 国产中文字幕精品在线| 亚洲色成人网站www永久下载| 野花香电视剧免费观看全集高清播放| 中文字幕人妻中出制服诱惑| 中文字幕一区二区三区四区五区| 国产综合精品一区二区三区| 中文字幕国产精品日韩|