必威体育Betway必威体育官网
当前位置:首页 > IT技术

局域网QQ第三版(V1.4)

时间:2019-07-18 15:43:21来源:IT技术作者:seo实验室小编阅读:54次「手机版」
 

局域网qq

原文地址为:局域网qq第三版(V1.4)

局域网QQ,无客户端和服务端之分,局域网的计算机运行本程序就可以互相看见,可以自由聊天和传文件。

本版较之1.0版的改进之处:

使用数据结构类型传送数据;

增加传文件功能(有进度条);

考虑大家重现本程序方便,本程序一直没有用到任何额外的控件和子窗体

版本依然是在VS2003下编译,只要贴进编译器中就可以重现。

转换到VS2005平台的方法:

把程序拷到vs2005中form1.cs里面

在“窗体设计器生成的代码”里面加一句:

System.windows.Forms.Control.CheckForIllegalCrossThreadCalls = false;

然后把vs2005自动生成的form1.designer.cs 和program.cs两个文件删掉

using System;

using System.Drawing;

using System.Collections;

using System.componentModel;

using System.Windows.Forms;

using System.Data;

using System.Net;

using System.Net.sockets;

using System.Text;

using System.Threading;

using System.IO;

namespace myQQ

{

    /// <summary>

    /// Form1 的摘要说明。

    /// </summary>

    public class Form1 : System.Windows.Forms.Form

    {

        public bool runing = false; //标志

        public UdpClient listen = new UdpClient(2525);

        public IPEndPoint End;

        public Ipaddress groupAddress = IPAddress.Parse("255.255.255.255"); //广播地址

        public int groupPort = 2525;  //广播端口

        public IPAddress myIP;

        public string myName;

        public string romeName;

        public IPAddress romeIP;

        public string romeCon;

        public sendData mySendData = new sendData(); //本地的0号命令发送包

        public bool isfile;//传送文件标志

        public string savePath;//传文件的保存地址

        public string romeFileName;//远程文件名

        public string romeFilel;//远程文件用单位表示的长度,格式为 43M或437K

        public filestream sendfilestream;//发送文件流

   private System.Windows.Forms.listbox box;

        private System.Windows.Forms.Label label1;

        private System.Windows.Forms.Label label2;

        private System.Windows.Forms.Button button1;

        private System.Windows.Forms.Button button3;

        private System.Windows.Forms.TextBox t_rec;

        private System.Windows.Forms.TextBox t_send;

        private System.Windows.Forms.Button button2;

        private System.Windows.Forms.Button newmsg;

        private System.Windows.Forms.Label online;

        private System.Windows.Forms.ToolTip toolTip1;

        //private System.Windows.Forms.ImageList imageList1;

        private System.Windows.Forms.LinkLabel linkLabel1;

        private System.Windows.Forms.Label label3;

        private System.Windows.Forms.Button button4;

        private System.Windows.Forms.OpenFileDialog openFileDialog1;

        private System.Windows.Forms.TextBox t_filep;

        private System.Windows.Forms.SaveFileDialog saveFileDialog1;

        private System.Windows.Forms.Panel processA;

        private System.Windows.Forms.progressBar progressBar1;

        private System.Windows.Forms.Panel processB;

        private System.Windows.Forms.ProgressBar progressBar2;

        private System.ComponentModel.IContainer components;

   public Form1()

        {

            //

            // Windows 窗体设计器支持所必需的

            //

            InitializeComponent();

   //

            // TODO: 在 InitializeComponent 调用后添加任何构造函数代码

            //

        }

   /// <summary>

        /// 清理所有正在使用的资源

        /// </summary>

        protected override void Dispose(bool disposing)

        {

            if (disposing)

            {

                if (components != null)

                {

                    components.Dispose();

                }

            }

            base.Dispose(disposing);

        }

   #region Windows 窗体设计器生成的代码

        /// <summary>

        /// 设计器支持所需的方法 - 不要使用代码编辑器修改

        /// 此方法的内容

        /// </summary>

        private void InitializeComponent()

        {

            //System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false;

            this.components = new System.ComponentModel.container();

            System.resources.ResourceManager resources = new System.Resources.ResourceManager(typeof(Form1));

            this.box = new System.Windows.Forms.ListBox();

            this.t_rec = new System.Windows.Forms.TextBox();

            this.label1 = new System.Windows.Forms.Label();

            this.label2 = new System.Windows.Forms.Label();

            this.t_send = new System.Windows.Forms.TextBox();

            this.button1 = new System.Windows.Forms.Button();

            this.button3 = new System.Windows.Forms.Button();

            this.online = new System.Windows.Forms.Label();

            this.button2 = new System.Windows.Forms.Button();

            this.newmsg = new System.Windows.Forms.Button();

            this.toolTip1 = new System.Windows.Forms.ToolTip(this.components);

            //this.imageList1 = new System.Windows.Forms.ImageList(this.components);

            this.linkLabel1 = new System.Windows.Forms.LinkLabel();

            this.label3 = new System.Windows.Forms.Label();

            this.t_filep = new System.Windows.Forms.TextBox();

            this.button4 = new System.Windows.Forms.Button();

            this.openFileDialog1 = new System.Windows.Forms.OpenFileDialog();

            this.saveFileDialog1 = new System.Windows.Forms.SaveFileDialog();

            this.processA = new System.Windows.Forms.Panel();

            this.progressBar1 = new System.Windows.Forms.ProgressBar();

            this.processB = new System.Windows.Forms.Panel();

            this.progressBar2 = new System.Windows.Forms.ProgressBar();

            this.processA.Suspendlayout();

            this.processB.SuspendLayout();

            this.SuspendLayout();

            //

            // box

            //

            this.box.ItemHeight = 12;

            this.box.Location = new System.Drawing.Point(0, 32);

            this.box.Name = "box";

            this.box.Size = new System.Drawing.Size(200, 352);

            this.box.TabIndex = 0;

            //

            // t_rec

            //

            this.t_rec.Backcolor = System.Drawing.SystemColors.InactiveBorder;

            this.t_rec.ForeColor = System.Drawing.Color.FromArgb(((System.Byte)(192)), ((System.Byte)(64)), ((System.Byte)(0)));

            this.t_rec.Location = new System.Drawing.Point(208, 56);

            this.t_rec.Multiline = true;

            this.t_rec.Name = "t_rec";

            this.t_rec.scrollBars = System.Windows.Forms.ScrollBars.Vertical;

            this.t_rec.Size = new System.Drawing.Size(328, 136);

            this.t_rec.TabIndex = 1;

            this.t_rec.Text = "";

            //

            // label1

            //

            this.label1.Location = new System.Drawing.Point(208, 40);

            this.label1.Name = "label1";

            this.label1.Size = new System.Drawing.Size(120, 16);

            this.label1.TabIndex = 2;

            this.label1.Text = "接收:";

            //

            // label2

            //

            this.label2.Location = new System.Drawing.Point(208, 200);

            this.label2.Name = "label2";

            this.label2.Size = new System.Drawing.Size(48, 16);

            this.label2.TabIndex = 2;

            this.label2.Text = "发送:";

            //

            // t_send

            //

            this.t_send.Location = new System.Drawing.Point(208, 224);

            this.t_send.Multiline = true;

            this.t_send.Name = "t_send";

            this.t_send.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;

            this.t_send.Size = new System.Drawing.Size(328, 120);

            this.t_send.TabIndex = 1;

            this.t_send.Text = "";

            //

            // button1

            //

            this.button1.Location = new System.Drawing.Point(440, 352);

            this.button1.Name = "button1";

            this.button1.Size = new System.Drawing.Size(75, 32);

            this.button1.TabIndex = 3;

            this.button1.Text = "发  送";

            this.button1.Click += new System.eventhandler(this.button1_Click);

            //

            // button3

            //

            this.button3.FlatStyle = System.Windows.Forms.FlatStyle.Popup;

            this.button3.Location = new System.Drawing.Point(120, 5);

            this.button3.Name = "button3";

            this.button3.Size = new System.Drawing.Size(56, 23);

            this.button3.TabIndex = 4;

            this.button3.Text = "刷 新";

            this.button3.Click += new System.EventHandler(this.button3_Click);

            //

            // online

            //

            this.online.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(134)));

            this.online.ForeColor = System.Drawing.Color.Blue;

            this.online.Location = new System.Drawing.Point(8, 8);

            this.online.Name = "online";

            this.online.Size = new System.Drawing.Size(88, 16);

            this.online.TabIndex = 5;

            this.online.Text = "在线用户:";

            //

            // button2

            //

            this.button2.Location = new System.Drawing.Point(352, 352);

            this.button2.Name = "button2";

            this.button2.Size = new System.Drawing.Size(75, 32);

            this.button2.TabIndex = 6;

            this.button2.Text = "清  空";

            this.button2.Click += new System.EventHandler(this.button2_Click);

            //

            // newmsg

            //

            this.newmsg.Location = new System.Drawing.Point(208, 56);

            this.newmsg.Name = "newmsg";

            this.newmsg.Size = new System.Drawing.Size(328, 136);

            this.newmsg.TabIndex = 7;

            this.newmsg.Text = "有新消息了!";

            this.newmsg.Click += new System.EventHandler(this.newmsg_Click);

            //

            // imageList1

            //

            //this.imageList1.ImageSize = new System.Drawing.Size(32, 32);

            //this.imageList1.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imageList1.ImageStream")));

            //this.imageList1.TransparentColor = System.Drawing.Color.Transparent;

            //

            // linkLabel1

            //

            this.linkLabel1.Location = new System.Drawing.Point(264, 200);

            this.linkLabel1.Name = "linkLabel1";

            this.linkLabel1.Size = new System.Drawing.Size(48, 16);

            this.linkLabel1.TabIndex = 8;

            this.linkLabel1.TabStop = true;

            this.linkLabel1.Text = "传文件";

            this.linkLabel1.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabel1_LinkClicked);

            //

            // label3

            //

            this.label3.Location = new System.Drawing.Point(208, 240);

            this.label3.Name = "label3";

            this.label3.Size = new System.Drawing.Size(72, 16);

            this.label3.TabIndex = 9;

            this.label3.Text = "文件地址:";

            //

            // t_filep

            //

            this.t_filep.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;

            this.t_filep.Location = new System.Drawing.Point(272, 232);

            this.t_filep.Name = "t_filep";

            this.t_filep.Size = new System.Drawing.Size(233, 21);

            this.t_filep.TabIndex = 10;

            this.t_filep.Text = "";

            //

            // button4

            //

            this.button4.FlatStyle = System.Windows.Forms.FlatStyle.Popup;

            this.button4.Location = new System.Drawing.Point(504, 232);

            this.button4.Name = "button4";

            this.button4.Size = new System.Drawing.Size(32, 21);

            this.button4.TabIndex = 11;

            this.button4.Text = "…";

            this.button4.Click += new System.EventHandler(this.button4_Click);

            //

            // processA

            //

            this.processA.BackColor = System.Drawing.SystemColors.Window;

            this.processA.Controls.Add(this.progressBar1);

            this.processA.Location = new System.Drawing.Point(224, 264);

            this.processA.Name = "processA";

            this.processA.Size = new System.Drawing.Size(288, 24);

            this.processA.TabIndex = 12;

            //

            // progressBar1

            //

            this.progressBar1.Location = new System.Drawing.Point(8, 6);

            this.progressBar1.Name = "progressBar1";

            this.progressBar1.Size = new System.Drawing.Size(272, 12);

            this.progressBar1.Step = 5;

            this.progressBar1.TabIndex = 0;

            //

            // processB

            //

            this.processB.BackColor = System.Drawing.SystemColors.Control;

            this.processB.Controls.Add(this.progressBar2);

            this.processB.Location = new System.Drawing.Point(224, 112);

            this.processB.Name = "processB";

            this.processB.Size = new System.Drawing.Size(288, 24);

            this.processB.TabIndex = 12;

            //

            // progressBar2

            //

            this.progressBar2.Location = new System.Drawing.Point(8, 6);

            this.progressBar2.Name = "progressBar2";

            this.progressBar2.Size = new System.Drawing.Size(272, 12);

            this.progressBar2.Step = 5;

            this.progressBar2.TabIndex = 0;

            //

            // Form1

            //

            this.AutoscaleBaseSize = new System.Drawing.Size(6, 14);

            this.ClientSize = new System.Drawing.Size(544, 389);

            this.Controls.Add(this.processB);

            this.Controls.Add(this.processA);

            this.Controls.Add(this.t_send);

            this.Controls.Add(this.button4);

            this.Controls.Add(this.t_filep);

            this.Controls.Add(this.label3);

            this.Controls.Add(this.linkLabel1);

            this.Controls.Add(this.button2);

            this.Controls.Add(this.online);

            this.Controls.Add(this.button3);

            this.Controls.Add(this.button1);

            this.Controls.Add(this.label1);

            this.Controls.Add(this.box);

            this.Controls.Add(this.label2);

            this.Controls.Add(this.t_rec);

            this.Controls.Add(this.newmsg);

            //this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));

            this.Name = "Form1";

            this.Text = "小y";

            this.Closing += new System.ComponentModel.CancelEventHandler(this.Form1_Closing);

            this.Load += new System.EventHandler(this.Form1_Load);

            this.processA.ResumeLayout(false);

            this.processB.ResumeLayout(false);

            this.ResumeLayout(false);

   }

        #endregion

   /// <summary>

        /// 应用程序的主入口点。

        /// </summary>

        [STAThread]

        static void Main()

        {

            APPlication.Run(new Form1());

        }

        //数据包格式

        public struct sendData

        {

            public byte commandNo;//命令号 1字节

            public IPAddress fromIP;//发送端IP 4字节

            public int nameLength;  //名字的字节数  4字节

            public string computerName;//计算机名  x字节

            public IPAddress toIP;//接收端IP; 4字节

            public string content;//内容  y字节

        }

        private void Form1_Load(object sender, System.EventArgs e)

        {

   End = new IPEndPoint(groupAddress, groupPort);

            //初始化计算机名和端口

            IPHostEntry myentry = Dns.GetHostByName(Dns.GetHostName());

            myIP = new IPAddress(myentry.AddressList[0].Address);

            myName = Dns.GetHostName();

   box.Items.Add("IP            主机名");

   //开启监听线程

            runing = true;

            Thread myThread = new Thread(new ThreadStart(this.ListenPort));

            myThread.isbackground = false;

            myThread.Start();

   //发送上线信息

            mySendData.commandNo = 0;

            mySendData.fromIP = myIP;

            mySendData.computerName = myName;

            mySendData.toIP = myIP;

            mySendData.content = "上线提示";

            byte[] sendb = StructToBytes(mySendData);

            SendPack(sendb);

   //初始化窗体位置

            t_send.Height = 120;

            t_send.Top = 224;

            linkLabel1.Text = "传文件";

            processA.Visible = false;//发送的进度

            processB.Visible = false;//接收的进度

        }

   //侦听指定端口的广播地址UDP包

        public void ListenPort()

        {

            IPEndPoint tempEnd = new IPEndPoint(IPAddress.Any, 2525);

            while (runing)

            {

                Application.DoEvents();

                try

                {

                    byte[] recb = listen.Receive(ref tempEnd);

       // 检查所接收到的信息and处理之

                    checkmessage(recb);

                }

                catch (Exception e)

                {

                    MessageBox.Show("出现错误:" + e.Message.ToString());

                    break;

                }

   }

            listen.Close();

            box.Items.Add("线程已经退出!");

            runing = false;

        }

   //循环接收包

        public void checkMessage(byte[] recbb)

        {

            sendData recData = BytesToStruct(recbb);

            romeName = recData.computerName;

            romeIP = recData.fromIP;

            romeCon = recData.content;

            switch (recData.commandNo)

            {

                case 0x00: //刷新

                    if (recData.toIP.Equals(myIP))

                    {

                        if (box.FindString(recData.fromIP.ToString() + "  " + recData.computerName) <= 0)

                            box.Items.Add(recData.fromIP.ToString() + "  " + recData.computerName);

                        online.Text = "在线用户:" + (box.Items.Count - 1) + "人";

                    }

                    else if (recData.fromIP.Equals(recData.toIP))

                    {

                        //从其他机器发送过来的刷新请求

                        //返回自己的信息

                        mySendData.commandNo = 0x00;

                        mySendData.toIP = recData.toIP;

                        mySendData.content = "上线提示";

                        byte[] sendb = StructToBytes(mySendData);

                        SendPack(sendb);

                        //如果不存在则添加该用户

                        if (box.FindString(recData.fromIP.ToString() + "  " + recData.computerName) <= 0)

                            box.Items.Add(recData.fromIP.ToString() + "  " + recData.computerName);

                    }

                    break;

                case 0x01: //发言

                    if (recData.toIP.Equals(myIP) && !isfile)

                    {//当传送的不包含文件时才显示“有新消息了”

                        showNe();

                    }

                    break;

                case 0x02: //请求传文件

                    if (recData.toIP.Equals(myIP))

                    {//准备接收文件

                        romeFileName = romeCon.Split('+')[0];

                        romeFilel = romeCon.Split('+')[1];

                        readyRecFile();

                    }

                    break;

                case 0x03://传文件

                    if (recData.toIP.Equals(myIP))

                    {//传送文件

                        Thread mysend = new Thread(new ThreadStart(sendFile));

                        mysend.Start();

                    }

                    break;

                case 0x09: //确认包

                    if (recData.toIP.Equals(myIP))

                        MessageBox.Show("信息来自:" + recData.computerName + "(" + recData.fromIP.ToString() + ")\r\n" + recData.content, "消息");

                    break;

            }

   }

   //发送数据包到广播地址

        public void SendPack(byte[] sendbs)

        {

            try

            {

                listen.Send(sendbs, sendbs.Length, End);

            }

            catch (Exception e)

            {

                MessageBox.Show(e.Message.ToString());

            }

        }

        //struct转换成byte[]

        public static byte[] StructToBytes(sendData structObj)

        {

            byte[] commandb = new byte[1];

            commandb[0] = structObj.commandNo;

            byte[] fromipb = structObj.fromIP.GetAddressBytes();

            byte[] nameb = Encoding.Default.GetBytes(structObj.computerName);

            byte[] lengthb = BitConverter.GetBytes(nameb.Length);

            byte[] toipb = structObj.toIP.GetAddressBytes();

            byte[] contentb = Encoding.Default.GetBytes(structObj.content);

            byte[] buffer = new byte[13 + nameb.Length + contentb.Length];

            int index = 0;

            commandb.copyto(buffer, index);

            index += commandb.Length;

            fromipb.CopyTo(buffer, index);

            index += fromipb.Length;

            lengthb.CopyTo(buffer, index);

            index += lengthb.Length;

            nameb.CopyTo(buffer, index);

            index += nameb.Length;

            toipb.CopyTo(buffer, index);

            index += toipb.Length;

            contentb.CopyTo(buffer, index);

            return buffer;

        }

        //byte转换成struct

        public static sendData BytesToStruct(byte[] bytes)

        {

            sendData myre = new sendData();

            myre.commandNo = bytes[0];

            byte[] ipb = new byte[4];

            Array.Copy(bytes, 1, ipb, 0, 4);

            myre.fromIP = IPAddress.Parse(ipByteToString(ipb));

            myre.nameLength = BitConverter.ToInt32(bytes, 5);

            myre.computerName = Encoding.Default.GetString(bytes, 9, myre.nameLength);

            Array.Copy(bytes, 9 + myre.nameLength, ipb, 0, 4);

            myre.toIP = IPAddress.Parse(ipByteToString(ipb));

            myre.content = Encoding.Default.GetString(bytes, 13 + myre.nameLength, bytes.Length - 13 - myre.nameLength);

            return myre;

        }

        //将byte[]表示的IP地址转换成IPAddress类型

        public static string ipByteToString(byte[] ipbt)

        {

            string temp = "";

            temp = (int)ipbt[0] + "." + (int)ipbt[1] + "." + (int)ipbt[2] + "." + (int)ipbt[3];

            return temp;

        }

        //刷新

        private void button3_Click(object sender, System.EventArgs e)

        {

            box.Items.Clear();

            box.Items.Add("IP            主机名");

            mySendData.commandNo = 0;

            mySendData.fromIP = myIP;

            mySendData.computerName = myName;

            mySendData.toIP = myIP;

            mySendData.content = "上线提示";

            byte[] sendb = StructToBytes(mySendData);

            SendPack(sendb);

        }

   //关闭循环

        private void Form1_Closing(object sender, System.ComponentModel.CancelEventArgs e)

        {

            runing = false;

            UdpClient mm = new UdpClient();

            IPEndPoint tempIPEnd = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 2525);

            mySendData.commandNo = 0;

            mySendData.fromIP = myIP;

            mySendData.computerName = myName;

            mySendData.toIP = myIP;

            mySendData.content = "上线提示";

            byte[] sendb = StructToBytes(mySendData);

            mm.Send(sendb, sendb.Length, tempIPEnd);

        }

        //发送

        private void button1_Click(object sender, System.EventArgs e)

        {

            if (box.SelectedItem == null || box.selectedindex == 0)

            {

                MessageBox.Show("请先选择一个用户!");

                return;

            }

            if (linkLabel1.Text == "不传文件" && t_filep.Text != "")

            {//需要传文件

                //首先发送2号命令 要求对方准备接收

                sendfilestream = new FileStream(t_filep.Text, FileMode.Open, FileAccess.Read);

                long filelength = sendfilestream.Length;

                string totalsteps;

                int temp;

                if (filelength / (1024 * 1024) > 10)

                {//文件>10M时用M做为进度最小单位

                    temp = (int)(filelength / (1024 * 1024));

                    totalsteps = temp + "M";

                }

                else

                {//小于10M的文件用k做为最小单位

                    temp = (int)(filelength / 1024);

                    totalsteps = temp + "K";

                }

                //用做接收端时的公共变量保存发送的临时值

                romeFilel = totalsteps;

                string filename = Path.GetFileName(t_filep.Text);

                mySendData.commandNo = 0x02;

                mySendData.fromIP = myIP;

                mySendData.computerName = myName;

                mySendData.toIP = IPAddress.Parse(box.SelectedItem.ToString().Split(' ')[0]);

                mySendData.content = filename + "+" + totalsteps;//格式:yy.txt+62K+64990

                byte[] sendb = StructToBytes(mySendData);

                SendPack(sendb);

   //界面上的处理

                t_send.Height = 120;

                t_send.Top = 224;

                linkLabel1.Text = "传文件";

            }

            //发言

            if (t_send.Text == "")

            {

                return;

            }

            mySendData.commandNo = 0x01;

            mySendData.fromIP = myIP;

            mySendData.computerName = myName;

            mySendData.toIP = IPAddress.Parse(box.SelectedItem.ToString().Split(' ')[0]);

            mySendData.content = t_send.Text;

            byte[] sendb2 = StructToBytes(mySendData);

            SendPack(sendb2);

        }

        //清空

        private void button2_Click(object sender, System.EventArgs e)

        {

            t_send.Text = string.empty;

            t_rec.Text = string.Empty;

        }

        //单击显示接收的信息并隐藏自身

        private void newmsg_Click(object sender, System.EventArgs e)

        {

            if (isfile)

            {//当传送的含有文件时

                saveFileDialog1.Filter = "所有格式|*.*";

                saveFileDialog1.FileName = romeFileName;

                if (saveFileDialog1.ShowDialog() == dialogresult.OK)

                    savePath = saveFileDialog1.FileName;

                else

                    return;

                t_rec.Text = "消息来自" + romeName + "(" + romeIP.ToString() + ")" + DateTime.Now.ToShortDateString();

                t_rec.Text += "\r\n> " + romeCon;

                //界面的处理

                newmsg.SendToBack();

                t_send.Height = 120;

                t_send.Top = 224;

                linkLabel1.Text = "传文件";

                //返回一个确认接收包

                mySendData.commandNo = 0x03;

                mySendData.fromIP = myIP;

                mySendData.computerName = myName;

                mySendData.toIP = romeIP;

                mySendData.content = "ready!";

                byte[] sendb = StructToBytes(mySendData);

                SendPack(sendb);

                //复位文件标志

                isfile = false;

                //同时开启线程开始监听

                Thread myrecv = new Thread(new ThreadStart(listenPort));

                myrecv.Start();

                return;

            }

            t_rec.Text = "消息来自" + romeName + "(" + romeIP.ToString() + ")" + DateTime.Now.ToShortDateString();

            t_rec.Text += "\r\n> " + romeCon;

            mySendData.commandNo = 0x09;

            mySendData.toIP = romeIP;

            mySendData.content = "信息被打开!";

            byte[] sendb2 = StructToBytes(mySendData);

            SendPack(sendb2);

            newmsg.SendToBack();

        }

        //当有信息时显示提示按钮

        public void showNe()

        {

            //窗体显示

            if (this.WindowState != FormWindowState.Normal)

            {

                this.Visible = true;

                this.WindowState = FormWindowState.Normal;

            }

            newmsg.Text = "有新消息了";

            newmsg.BringToFront();

        }

        //准备接收文件

        public void readyRecFile()

        {

            //窗体显示

            if (this.WindowState != FormWindowState.Normal)

            {

                this.Visible = true;

                this.WindowState = FormWindowState.Normal;

            }

            isfile = true;

            newmsg.Text = romeFileName + "(" + romeFilel + ")";

            newmsg.BringToFront();

        }

        //传文件

        private void linkLabel1_LinkClicked(object sender, System.Windows.Forms.LinkLabelLinkClickedEventArgs e)

        {

            if (linkLabel1.Text == "传文件")

            {

                t_send.Height = 80;

                t_send.Top = 264;

                linkLabel1.Text = "不传文件";

            }

            else

            {

                t_send.Height = 120;

                t_send.Top = 224;

                linkLabel1.Text = "传文件";

            }

        }

        //打开文件

        private void button4_Click(object sender, System.EventArgs e)

        {

            openFileDialog1.Filter = "所有文件|*.*|压缩文件|*.rar";

            if (openFileDialog1.ShowDialog() == DialogResult.OK)

            {

                t_filep.Text = openFileDialog1.FileName;

            }

        }

   //监听文件传送socket的线程——————功能:接收文件

        public void listenPort()

        {

            TcpListener listener = new TcpListener(2626);

            listener.Start();

            Socket s = listener.AcceptSocket();

            FileStream filestream = new FileStream(savePath, FileMode.OpenOrCreate, FileAccess.Write);

            NetworkStream stream = new NetworkStream(s);

            //定义缓冲区

            byte[] bb = new byte[1024];

            //循环读socket流

            int tt = 0;

            //进度条

            processB.Visible = true;

            processB.BackColor = System.Drawing.SystemColors.Control;

            int stepoff;

            if (romeFilel[romeFilel.Length - 1] == 'K')

                stepoff = 1024;

            else

                stepoff = 1024 * 1024;

            int totalste = int.Parse(romeFilel.substring(0, romeFilel.Length - 1));

            progressBar2.Maximum = totalste;

            progressBar2.Step = totalste / 20;

            float recbytes = 0;

            while ((tt = stream.Read(bb, 0, 1024)) != 0)

            {//接收数据

                filestream.Write(bb, 0, tt);

                filestream.Flush();

                //更新进度条

                recbytes += (float)tt / stepoff;

                progressBar2.Value = (int)recbytes;

            }

            filestream.Close();

            processB.Visible = false;

            MessageBox.Show("文件接收完毕!");

        }

        //传送文件的线程————————功能:发送文件服务端

        public void sendFile()

        {

            TcpClient serverClient = new TcpClient();

            serverClient.Connect(romeIP, 2626);

            NetworkStream stream = serverClient.GetStream();

            //定义缓冲区

            byte[] bb = new byte[1024];

            //循环读文件

            int number;

            //进度条

            processA.Visible = true;

            processA.BackColor = System.Drawing.SystemColors.Window;

            int stepoff;

            if (romeFilel[romeFilel.Length - 1] == 'K')

                stepoff = 1024;

            else

                stepoff = 1024 * 1024;

            int totalste = int.Parse(romeFilel.Substring(0, romeFilel.Length - 1));

            progressBar1.Maximum = totalste;

            progressBar1.Step = totalste / 20;

            float sendedbytes = 0;

            while ((number = sendfilestream.Read(bb, 0, 1024)) != 0)

            {//向客户端发送流

                stream.Write(bb, 0, number);

                //刷新流

                stream.Flush();

                //进度条

                sendedbytes += (float)number / stepoff;

                progressBar1.Value = (int)sendedbytes;

            }

            sendfilestream.Close();

            stream.Close();

            processA.Visible = false;

            MessageBox.Show("文件传送完毕!");

        }

    }

}

说明:

本程序通讯原理是局域网广播,如果使用组播技术可以实现跨网段通讯。传送文件使用p2p方式。

转载请注明本文地址:局域网QQ第三版(V1.4)

相关阅读

QQ宠物下线,未来人类的心灵谁来陪伴?

前些天,QQ宠物下线了,在线情感何去何处,寄托在何处?或许在未来,虚拟的伴侣会以更多形式出现在人们的生活里。Technology redraws the b

从QQ到陌陌再到?陌生人社交的第四个风口来了

社交一直是中国互联网的强势应用,甚至在16年前QQ诞生之前已是如此。从某种程度上来说,社交应用还是大多数刚学会上网的人的启蒙应用

QQ坦白说解密解决方案(二)

最近QQ正式上线了坦白说,好多有强迫症的小伙伴比较痛苦,特别想知道对方是谁,其实笔者之前也专门发布过一篇博客(PS:QQ坦白说解密一:点击

2018淘宝互刷qq群最常见的五大弊端

2018淘宝互刷qq群最常见的五大弊端是什么?很多朋友想要做淘宝互刷,但是担心淘宝互刷qq群靠不靠谱的问题,为此seo实验室小编特地整理

哪尼?QQ公众号来了?

阿拓带你飞:微信公众号出现之后,微信端发力威猛,科技圈一度认为微信将在短时间内打败QQ,连马化腾都很幸运地说:&#8221;打败QQ的不是竞

分享到:

栏目导航

推荐阅读

热门阅读