亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

c#多線程網絡聊天程序代碼分享(服務器端和客戶端)

2020-01-24 03:00:53
字體:
來源:轉載
供稿:網友

XuLIeHua類庫

復制代碼 代碼如下:

using System;
using System.Collections; 
using System.Collections.Generic;
using System.Threading; 
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
using System.Text;
using System.IO;
using System.Net;  
using System.Net.Sockets;
namespace XuLIeHua
{
    [Serializable]
    public struct NetMsg
    {
        public IPAddress Fip;     //發送者的IP。
        public string msg;        //發送的消息。
        public IPAddress JieIP;   //接收者的ip。
        public int port;          //端口。
    }
    public class XuLIe
    {
        /// <summary>
        /// 序列化
        /// </summary>
        /// <param ></param>
        /// <returns></returns>
        public static byte[] ObjToByte(object obj)
        {
            byte[] tmp = null;
            MemoryStream fs = new MemoryStream();
            try
            {
                BinaryFormatter Xu = new BinaryFormatter();
                Xu.Serialize(fs, obj);
                tmp = fs.ToArray();
            }
            catch (Exception err)
            {
                throw err;
            }
            finally
            {
                fs.Close();
            }
            return tmp;
        }
        /// <summary>
        /// 反列化
        /// </summary>
        /// <param ></param>
        /// <returns></returns>
        public static object ByteToObj(byte[] tmp)
        {
            MemoryStream fs = null;
            object obj = null;
            try
            {
                fs = new MemoryStream(tmp);
                fs.Position = 0;
                BinaryFormatter Xu = new BinaryFormatter();
                obj = Xu.Deserialize(fs);
            }
            catch (Exception err)
            {
                throw err;
            }
            finally
            {
                fs.Close();
            }
            return obj;
        }
    }
    public class ServerJieShou
    {
        private static TcpClient Client;
        public Thread th;
        private ArrayList Arr;
        private LogText log;
        private bool Tiao = true;
        private Timer time1;
        private TimerCallback time;
        public ServerJieShou(TcpClient sClient, ArrayList arr)
        {
            log = new LogText("連接") ;
            Client = sClient;
            Arr = arr;
            th = new Thread(new ThreadStart(ThSub));
            th.IsBackground = true;
            th.Start();
            time = new TimerCallback(XinTiao);
            time1 = new Timer(time, null, 15000, -1);

        }
        private void XinTiao(object state)
        {
            if (Tiao == true)
            {
                Tiao = false;
            }
            else
            {
                Client = null;
            }
        }
        private void ThSub()
        {
            try
            {
                while (Client != null)
                {
                    NetworkStream Net = Client.GetStream();
                    if (Net.DataAvailable == true) //有數據。
                    {
                        byte[] tmp = new byte[1024];
                        if (Net.CanRead == true)
                        {
                            MemoryStream memory = new MemoryStream();
                            memory.Position = 0;
                            int len = 1;
                            while (len != 0)
                            {
                                if (Net.DataAvailable == false) { break; }
                                len = Net.Read(tmp, 0, tmp.Length);
                                memory.Write(tmp, 0, len);
                            }
                            log.LogWriter("接收完畢"); 
                            NetMsg msg = (NetMsg)XuLIe.ByteToObj(memory.ToArray());
                            log.LogWriter("序列化完畢");
                            TcpClient tcpclient = new TcpClient();
                            log.LogWriter("建立TCP對象");
                            if (msg.Fip != null) //非心跳包。
                            {
                                try
                                {
                                    tcpclient.Connect(msg.JieIP, msg.port);
                                    NetworkStream SubNet = tcpclient.GetStream();
                                    byte[] Tmp = XuLIe.ObjToByte(msg);
                                    SubNet.Write(Tmp, 0, Tmp.Length);
                                }
                                catch (SocketException)
                                {
                                    msg.msg = "對方不在線";
                                    byte[] Tmp = XuLIe.ObjToByte(msg);
                                    Net.Write(Tmp, 0, Tmp.Length);
                                }
                            }
                            else
                            {
                                if (msg.msg == "QUIT")
                                {
                                    Arr.Remove(Client);
                                    return;
                                }
                            }
                            tcpclient.Close();
                            GC.Collect();
                        }
                    }
                    else //沒有數據。
                    {
                    }
                    Thread.Sleep(1000);
                }
            }
            catch
            {
                Arr.Remove(Client);
                th.Abort(); 
            }
        }
    }
}

日志輸出類

復制代碼 代碼如下:

using System;
using System.Text;
using System.IO; 
using System.Windows.Forms;
namespace XuLIeHua
{
 /// <summary>
 /// 錯誤日志的輸出。
 /// </summary>
 public class LogText
 {
  private string AppPath;
  private StreamWriter StrW;
  private string FileName;
  public LogText(string FileName1)
  {
   AppPath = Application.StartupPath +@"/Log";
   try
   {
    if (Directory.Exists(AppPath) == false)
    {
     Directory.CreateDirectory(AppPath);  
    }
    if (File.Exists(AppPath+@"/"+FileName+".log") == false)
    {
     File.Create(AppPath+@"/"+FileName+".log");
    }
    FileName = FileName1;
   }
   catch{}
  }
  public void LogWriter(string Text)
  {
   try
   {
    StrW = new StreamWriter(AppPath+@"/"+FileName+".log",true);
    StrW.WriteLine("時間:{0} 描述:{1} /r/n",DateTime.Now.ToString(),Text);
    StrW.Flush();
    StrW.Close();
   }
   catch{}
  }
 }
}

服務器

復制代碼 代碼如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Net;
using System.Threading;
using XuLIeHua;
using System.Net.Sockets;   
using System.Collections;
namespace 服務器
{
    public partial class frmServer : Form
    {
        public frmServer()
        {
            InitializeComponent();
        }
        private ArrayList arr;
        private TcpListener Server1;
        private TcpClient col;
        private ArrayList LianJIe;
        private void frmServer_Load(object sender, EventArgs e)
        {
            arr = new ArrayList();
            LianJIe = new ArrayList();
            Server1 = new TcpListener(Dns.GetHostAddresses(Dns.GetHostName())[0], 8000);
            Server1.Start();
            timer1.Enabled = true;
        }
        private void timer1_Tick(object sender, EventArgs e)
        {
            try
            {

                if (Server1.Pending() == true)
                {
                    col = Server1.AcceptTcpClient();
                    arr.Add(col);
                    XuLIeHua.ServerJieShou server = new ServerJieShou(col, arr);
                    LianJIe.Add(server); 
                }

                if (arr.Count == 0) { return; }
                listBox1.Items.Clear();
                foreach (TcpClient Col in arr)
                {
                    IPEndPoint ip = (IPEndPoint)Col.Client.RemoteEndPoint;
                    listBox1.Items.Add(ip.ToString());
                }
            }
            catch (Exception err)
            {
                MessageBox.Show(err.Message);
               // Application.Exit(); 
            }
        }
        private void frmServer_FormClosing(object sender, FormClosingEventArgs e)
        {
            try
            {

                foreach (XuLIeHua.ServerJieShou  Col in LianJIe)
                {
                    Col.th.Abort();  
                    Col.th.Join();  
                }
                foreach (TcpClient Col in arr)
                {

                    Col.Close();
                }
            }
            finally
            {
                Application.Exit();
            }
        }

    }
}

客戶端

復制代碼 代碼如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Threading;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
using System.IO;
using System.Net;
using System.Net.Sockets;
using XuLIeHua;
namespace 客戶端
{
    public partial class frmClinet : Form
    {
        public frmClinet()
        {
            InitializeComponent();
        }
        private TcpClient Clinet;
        private NetworkStream net;
        private void button3_Click(object sender, EventArgs e)
        {
            try
            {
                Clinet = new TcpClient();
                Clinet.Connect(Dns.GetHostAddresses(textBox2.Text)[0], 8000);
                this.Text = "服務器連接成功";
                Thread th = new Thread(new ThreadStart(JieShou));
                th.Start();
                timer1.Enabled = true; 
            }
            catch (SocketException)
            {
                Clinet.Close();
                Clinet = null;
            }

        }
        private void JieShou()
        {
            try
            {
                while(Clinet != null)
                {
                    net = Clinet.GetStream();
                    if (net.CanWrite == false) { Clinet = null; return;}
                    if (net.DataAvailable == true)
                    {
                        byte[] tmp = new byte[1024];
                        MemoryStream memory = new MemoryStream();
                        int len = 1;
                        while (len != 0)
                        {
                            if (net.DataAvailable == false) { break; }
                            len = net.Read(tmp, 0, tmp.Length);
                            memory.Write(tmp, 0, len);
                        }
                        if (memory.ToArray().Length != 4)
                        {
                            NetMsg msg = (NetMsg)XuLIe.ByteToObj(memory.ToArray());
                            textBox1.Text += msg.Fip.ToString() + "說: " + msg.msg + "/r/n";
                        }
                    }
                    Thread.Sleep(200); 
                }
            }
            catch (Exception err)
            {
                lock (textBox1)
                {
                    textBox1.Text = err.Message;
                }
            }
        }
        private void frmClinet_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (net.CanWrite == true)
            {
                NetMsg msg = new NetMsg();
                msg.msg = "QUIT";
                byte[] tmp = XuLIe.ObjToByte(msg);
                try
                {
                    net.Write(tmp, 0, tmp.Length);
                }
                catch (IOException)
                {
                    textBox1.Text += "已經從服務器斷開連接/r/n";
                    Clinet.Close();
                    Clinet = null;
                    return;
                }
            }
            Clinet = null;
            GC.Collect();
            Application.ExitThread(); 
        }
        private void button1_Click(object sender, EventArgs e)
        {
            try
            {
                if (Clinet != null)
                {
                    if (net != null)
                    {
                        NetMsg msg = new NetMsg();
                        msg.Fip = Dns.GetHostAddresses(Dns.GetHostName())[0];
                        msg.JieIP = Dns.GetHostAddresses(textBox3.Text)[0];
                        msg.msg = textBox4.Text;
                        byte[] tmp = XuLIe.ObjToByte(msg);
                        net.Write(tmp, 0, tmp.Length);
                    }
                }
                else
                {
                    textBox1.Text += "未與服務器建立連接/r/n";
                }
            }
            catch (Exception)
            {
                textBox1.Text += "未與服務器建立連接/r/n";
            }
        }
        private void timer1_Tick(object sender, EventArgs e)
        {
            try
            {
                if (Clinet != null)
                {
                    if (net.CanWrite == true)
                    {
                        NetMsg msg = new NetMsg();
                        msg.msg = "0000";
                        byte[] tmp = XuLIe.ObjToByte(msg);
                        try
                        {
                            net.Write(tmp, 0, tmp.Length);
                        }
                        catch (IOException)
                        {
                            textBox1.Text += "已經從服務器斷開連接/r/n";
                            Clinet.Close();
                            Clinet = null;
                            return;
                        }

                    }
                }
                else
                {
                    textBox1.Text += "未與服務器建立連接/r/n";
                }
            }
            catch (Exception err)
            {
                textBox1.Text += err.Message +"r/n";
            }
        }
    }
}

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
性欧美在线看片a免费观看| 日韩av网站大全| 亚洲理论电影网| 97人人爽人人喊人人模波多| www国产精品com| 日韩欧美成人区| 奇米成人av国产一区二区三区| 91久久久久久国产精品| 91久久精品国产91性色| 日韩电影大片中文字幕| 亚洲四色影视在线观看| 精品中文字幕乱| 国产午夜精品久久久| 97免费视频在线播放| 日本国产欧美一区二区三区| 久久久久久久网站| 色一情一乱一区二区| 久久99久久99精品免观看粉嫩| 性欧美暴力猛交69hd| 久久福利网址导航| 国产a级全部精品| 欧美精品aaa| 国语自产精品视频在线看| 日韩中文有码在线视频| 97高清免费视频| 大荫蒂欧美视频另类xxxx| 亚洲区bt下载| 日韩精品中文字幕在线观看| 日韩欧美在线视频观看| 久久精品青青大伊人av| 在线电影欧美日韩一区二区私密| 国产女人18毛片水18精品| 亚洲精品女av网站| 91chinesevideo永久地址| 日韩精品高清在线| 性色av一区二区咪爱| 欧美精品在线网站| 亚洲日本aⅴ片在线观看香蕉| 国产精品扒开腿做爽爽爽的视频| 国产精品成人v| 亚洲精品丝袜日韩| 国产精品三级美女白浆呻吟| 综合激情国产一区| 国产午夜精品麻豆| 日韩av一区二区在线观看| 国产精品成人免费视频| 在线看片第一页欧美| 一级做a爰片久久毛片美女图片| 九九热这里只有精品免费看| 亚洲高清福利视频| 2019精品视频| 日韩精品视频免费专区在线播放| 精品国产一区二区三区久久| 久久久久久亚洲精品| 欧美黑人一区二区三区| 97在线看免费观看视频在线观看| 久久99亚洲精品| 一区二区亚洲欧洲国产日韩| 国产日产欧美a一级在线| 自拍亚洲一区欧美另类| 亚洲成人教育av| 亚洲第一精品自拍| 日韩电影免费在线观看中文字幕| 久久五月情影视| 欧美电影在线免费观看网站| 91精品视频在线播放| 亚洲精品一区二区网址| 欧美精品情趣视频| 成人中文字幕在线观看| 欧美日韩在线影院| 亚州成人av在线| 亚洲美女av在线播放| 国产精品视频白浆免费视频| 久久免费国产视频| 国产精品igao视频| 欧美在线一区二区三区四| 日本人成精品视频在线| 国产精品久久久久秋霞鲁丝| 日韩成人网免费视频| 欧美日韩国产激情| 国产亚洲精品久久久优势| 久久精品在线视频| 国产一区二区三区在线观看网站| 精品动漫一区二区三区| 亚洲女人被黑人巨大进入al| 国语自产精品视频在免费| 精品亚洲一区二区三区| 国产福利视频一区| 午夜精品理论片| 中文字幕亚洲欧美一区二区三区| 欧美一区亚洲一区| 中文字幕欧美日韩va免费视频| 亚洲第一福利在线观看| 亚洲热线99精品视频| 91九色精品视频| 麻豆国产va免费精品高清在线| 久久夜色精品亚洲噜噜国产mv| 日韩中文字幕在线免费观看| 久久精品99无色码中文字幕| 夜夜嗨av色一区二区不卡| 欧美高清videos高潮hd| 成人黄色大片在线免费观看| 2019av中文字幕| 国产成人亚洲综合| 亚洲欧美日韩另类| 亚洲色图17p| 97视频在线观看免费| 久久免费福利视频| 上原亚衣av一区二区三区| 在线免费观看羞羞视频一区二区| 91精品在线观看视频| 欧美激情亚洲另类| 亚洲尤物视频网| 国产亚洲欧美另类中文| 97精品在线视频| 亚洲淫片在线视频| 日韩美女主播视频| 日韩精品免费在线视频| 日韩欧美在线中文字幕| 揄拍成人国产精品视频| 国产免费一区视频观看免费| 久久男人av资源网站| 亚洲女人初尝黑人巨大| 亚洲男人的天堂在线| 欧美第一黄网免费网站| 日本欧美一二三区| 亚洲女人天堂av| 97久久伊人激情网| 久久精品一区中文字幕| 亚洲va国产va天堂va久久| 欧美日韩在线免费观看| 中文字幕国内精品| 国产精品草莓在线免费观看| 亚洲人成绝费网站色www| 中文字幕精品—区二区| 国产深夜精品福利| 成人免费激情视频| 久久久999精品| 国产精品自拍小视频| 久久综合免费视频影院| 欧美精品久久久久久久久久| 亚洲精品国精品久久99热一| 黄网动漫久久久| 欧美亚洲另类视频| 国产精品综合网站| 亚洲精品按摩视频| 青青久久av北条麻妃黑人| 91精品视频免费看| 国产精品成人品| 66m—66摸成人免费视频| 国产午夜精品视频免费不卡69堂| 亚洲欧洲午夜一线一品| 超碰97人人做人人爱少妇| 日本aⅴ大伊香蕉精品视频| 国产精品久久久久久久久久久新郎| 亚洲三级 欧美三级| 国产精品一区二区在线| 精品美女国产在线| 国产欧美一区二区三区久久人妖| 亚洲三级免费看| 欧美老女人xx| 欧美午夜精品久久久久久浪潮| 成人美女av在线直播| 97在线视频国产|