黑马程序员---多线程和网络通信

.............................Windows Phone 7手机开发   .Net培训.................................

 

多线程和网络通信

Tcp 和UDP

多线程的作用

IpAddress.Any代表任意的IP ,0代表任意的端口号;

多播的范围是:224.0.0.0---224.255.255.255

UdpClient.JoinMulticastGroup();

多线程编程

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;

 

namespace WindowsApplFirst

{

    public partial class FormThread : Form

    {

        public FormThread()

        {

            //CheckForIllegalCrossThreadCalls = false;//允许跨线程访问

            RichTextBox.CheckForIllegalCrossThreadCalls = false;

            InitializeComponent();

        }

 

        private void timer1_Tick(object sender, EventArgs e)

        {

          label1.Text=   DateTime.Now.ToLocalTime().ToString();

          //progressBar1.Value += 10;

          progressBar1.Increment(10);

           //if( progressBar1.Value==progressBar1.Maximum)

          progressBar1.PerformStep();

             

        }

 

        private void button1_Click(object sender, EventArgs e)

        {

            ThreadStart ts = new ThreadStart(Print_int);

            Thread th = new Thread(ts);

            th.Name = "th:";

            th.Start();

            Thread th1 = new Thread(Print_int);

            th1.Name = "th1:";

            th1.Start();

        }

       //i声明在方法外部,两个线程将会共享数据i

        int i = 0;

        void Print_int()

        {

            lock (this)//加锁--同步

            {

                for (; i < 20; i++)

                {

                    //richTextBox1.Text += i + " ";

                    Console.Write(Thread.CurrentThread.Name + i + " ");

                    Thread.Sleep(1000);//让当前线程休眠1秒

                }

            }

        }

        void Print_int1()

        {

            for (int i = 0; i < 20; i++)

            {

                richTextBox2.Text += i + " ";

                // Console.Write(Thread.CurrentThread.Name + i + " ");

                Thread.Sleep(1000);//让当前线程休眠1秒

            }

        }

 

        private void FormThread_FormClosed(object sender, FormClosedEventArgs e)

        {

            //System.Environment.Exit(0);//释放所有系统资源

        }

        A a=new A();

        B b=new B();

        void Access_AB()

        {

            lock (a)

            {

                a.i++;

                Thread.Sleep(1000);

                lock (b)

                {

                    b.j++;

                }

            }

        }

        void Access_BA()

        {

            lock (b)

            {

                b.j++;

                Thread.Sleep(1000);

                lock (a)

                {

                    a.i++;

                }

            }

        }

 

        private void button2_Click(object sender, EventArgs e)

        {

            Thread th1 = new Thread(Access_AB);

            th1.Start();

            Thread th2 = new Thread(Access_BA);

            th2.Start();

        }

 

        private void button3_Click(object sender, EventArgs e)

        {

            Water water = new Water();

            Stove stove = new Stove(water);

            Thread th1 = new Thread(stove.AddHot);

            th1.Name = "th1";

            Thread th2 = new Thread(stove.AddHot);

            th2.Name = "th2";

            th1.Start();

            th2.Start();

        }

    }

    class A

    {

       public  int i;

    }

    class B

    {

       public int j;

    }

}

UDP编程

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

using System.Net;

using System.Net.Sockets;

using System.Threading;

 

namespace WindowsApplFirst

{

    //识别主机:Ip,发送信息:逻辑端口(0-65535)->(0-1023)知名端口;(1024-65535)可以使用

    //udp和tcp--传输层;http,ftp,smtp,telnet--应用层

    //udp:无连接协议,不可靠,传输效率高

    //Tcp:有连接协议,可靠,效率低,可用来传输大容量数据

    public partial class FormUDP : Form

    {

        public FormUDP()

        {

            InitializeComponent();

        }

        //Socket-->TcpClient,UdpClient;

        private void btn_send_Click(object sender, EventArgs e)

        {

            //UdpClient udpclient = new UdpClient();//分配本机随机端口号

            UdpClient udpclient = new UdpClient(11000);//11000本地端口号

            string remote_hostname = Dns.GetHostName();

            int remote_port=11002;

            //udpclient.Connect(remote_hostname,remote_port);

            //udpclient.Connect("10.1.33.255", remote_port);//广播:内网

 

            //使用多播发送信息,"224.12.20.8"为多播地址,多播地址范围(224.0.0.2-224.255.255.255)

            //只要接收端Socket加入了多播地址组,就可以接受到发送到多播地址组的信息

            udpclient.Connect("224.12.20.8", 11002);//将消息发送到多播地址组

            byte[] data = Encoding.Default.GetBytes("Hello");

            udpclient.Send(data,data.Length);

            udpclient.Close();//释放资源

        }

        //远程 

        //UdpClient udpclient = new UdpClient(11002);

        private void btn_recieve_Click(object sender, EventArgs e)

        {

            //IPAddress ip = IPAddress.Parse("127.0.0.1");

            //IPEndPoint sendPoint = new IPEndPoint(ip,11000);

            //byte[] data=  udpclient.Receive(ref sendPoint);

            //MessageBox.Show(Encoding.Default.GetString(data));

        }

        void Recieve_Data()

        {

            UdpClient udpclient = new UdpClient(11002);

            //该udpclient对象加入多播地址组

              udpclient.JoinMulticastGroup(IPAddress.Parse("224.12.20.8"));

            while (true)

            {

             

                //IPAddress ip = IPAddress.Parse("127.0.0.1");

                IPEndPoint sendPoint = new IPEndPoint(IPAddress.Any,0);//该端点可接受任意发送端的信息

                //线程运行到该处时,如果有数据被接受,线程继续运行,如果无数据到达,该线程进入阻塞状态

                byte[] data = udpclient.Receive(ref sendPoint);

                MessageBox.Show(Encoding.Default.GetString(data));

            }

        }

 

        private void button1_Click(object sender, EventArgs e)

        {

            Thread th = new Thread(Recieve_Data);

            th.Start();

        }

    }

}

TcP网络编程

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

using System.Net;

using System.Net.Sockets;

using System.Threading;

using WindowsApplFirst.实体类;

using WindowsApplFirst.功能类;

using System.IO;

 

namespace WindowsApplFirst

{

    public partial class FormTcp : Form

    {

        public FormTcp()

        {

            InitializeComponent();

        }

        //接受端

        //监听连接请求

        //TcpListener listener = new TcpListener(IPAddress.Parse("127.0.0.1"), 11000);

        private void button2_Click(object sender, EventArgs e)

        {

            //listener.Start();//启动服务

            //TcpClient tcp = listener.AcceptTcpClient();//接受连接请求

            //NetworkStream stream = tcp.GetStream();

            //byte[] data = new byte[100];

            //stream.Read(data, 0, 100);//接受数据

            //MessageBox.Show(Encoding.Default.GetString(data));

            //stream.Close();

            //tcp.Close();

        }

        //发送端

        private void button1_Click(object sender, EventArgs e)

        {

            //TcpClient tcp = new TcpClient("127.0.0.1", 11000);//创建TcpClient对象时去连接远程主机

           // tcp.Connect();

            TcpClient tcp = new TcpClient();

            try

            {

                tcp.Connect("127.0.0.1", 11000);

            }

            catch

            {

 

            }

            NetworkStream stream= tcp.GetStream();//得到网络流对象

            byte[] data = Encoding.Default.GetBytes("Hello");

            stream.Write(data,0,data.Length);//将data数据写到网络流中去--send

            stream.Close();

            tcp.Close();

        }

 

        private void FormTcp_Load(object sender, EventArgs e)

        {

            //listener.Start();

            Thread th = new Thread(Recieve_Data);

            th.Start();

        }

        void Recieve_Data()

        {

            TcpListener listener = new TcpListener(IPAddress.Parse("127.0.0.1"), 11000);

            listener.Start();

          

            while (true)

            {

                TcpClient tcp = listener.AcceptTcpClient();

                NetworkStream stream = tcp.GetStream();

                byte[] data = new byte[100];

                stream.Read(data, 0, 100);

                MessageBox.Show(Encoding.Default.GetString(data));

            }

        }

        MemoryStream ms;

        private void button3_Click(object sender, EventArgs e)

        {

            User u = new User("zhang", "123");

           ms= Data_Serialize.Serialize(u);

        }

 

        private void button4_Click(object sender, EventArgs e)

        {

          User u=  Data_Serialize.Deserialize(ms);

          MessageBox.Show(u.Name+u.Pwd);

        }

        //XmlSerialize

    }

}

.............................Windows Phone 7手机开发   .Net培训.................................

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值