.............................Windows Phone 7手机开发
多线程和网络通信
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手机开发