黑马程序员(7)——多线程聊天室

Windows Phone 7手机开发.Net培训、期待与您交流!

线程:是程序的一个执行流,每一个线程都有自己专属的寄存器(存储栈指针和程序计数器等),但是代码区是共享的。即不同的线程可以执行同样的函数。
多线程:是只程序中包含多个执行流,即在一个程序可以运行多个不同的线程来执行不同的代码,也就是说润徐单个程序创建多个并行的线程来完成各自的任务。




计算时间:DataeTime beginTime=DateTime.Now;…………TimeSpan ts=beginTime.Subtract(DateTime.Now);


如何实现多线程:
线程肯定也要执行一段代码。所以要产生一个线程,必须先为该线程写一个方法,这个方法中的代码就是该线程运行所要执行的代码。
线程启动时,通过委托调用该方法。(线程启动时,调用传过来的委托,委托就会执行相应的方法,实现线程执行方法。)
产生线程的4步骤:
1.编写产生线程所要执行的方法;2.引用System.Threading命名空间;3.实例化Thread类,并传入一个纸箱线程所要运行方法的委托。(这时这个线程已经产生,但是还没有运行);
4.调用THread示例的Start方法,标记该线程可以被CPU执行了,但是具体执行时间有CPU决定




前台线程:只有所有前台线程都关闭才能完成程序的关闭。
后台线程:只要所有的前台线程结束,后台线程自动结束。


将线程设置为后台线程: threadFirstIsBackground=true;


Tread类的重要成员:Start()启动、About()终止、Tread.Sleep(1)静态方法,可以使当前线程停止一段时间、Name线程名、Thread.CurrentThread获得当前线程引用。




线程执行带参数的方法:
void ShowTxtName(object name)
{
if(name!=null)
MessageBox.Show(...);
else
MessageBox.Show(...);
}
private void btnThreadWithPara_Click(object sender,EventArgs e)
{
//执行参数的方法:
Thread thread=new Thread(showTxtName);
thread.IsBackground=true;
thread.start(TxtName.Text.Trim());
}


执行带多个参数的方法:
void ShowTxtName2(object li)
{
List<string> list=li as List<string>;
if(list!=null)
{
foreach(string s in list)
{
MessageBox.Show(s);
}
}
}
private void bubtnThreadWithParatton1_click(object sender,EventArgs e)
{
Thread thread=new Thread(showTxtName2);
thread.IsBackground=true;

thread.start(new List<string>0{"sdf","esf","awe"});

}



套接字-服务器:


Thread threadWatch = null;//负责监听的线程客户端连接
        Socket sockeetWatch; //创建服务器负责监听的套接字


        private void btnBeginListen_Click(object sender, EventArgs e)
        {
            //创建服务器负责监听的套接字,参数意义(IP4寻址协议,流式连接,TCP协议传输数据 )
            Socket sockeetWatch = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            //获得文本框内的IP地址对象
            IPAddress address=IPAddress.Parse(txtIP.Text.Trim());
            //创建包含Ip和PORT的网络节点对象。
            IPEndPoint endpoint=new IPEndPoint(address,int.Parse(txtPort.Text.Trim()));
            //将负责监听的套接字绑定到唯一的IP和接口上。
            sockeetWatch.Bind(endpoint);
            //设置监听队列的长度。一次性处理的个数
            sockeetWatch.Listen(10);
           
            //创建富足监听的线程,并传入监听方法。
            threadWatch = new Thread(WatchConnecting);
            threadWatch.IsBackground = true;//设置为后台
            threadWatch.Start();//开启线程


            ShowMsg("服务器启动监听成功!");


           
        }


        void WatchConnecting()
        {
            //开始监听客户端请求,注意Accept方法会阻断当前的线程。用多线程解决问题。
            Socket solConnection = sockeetWatch.Accept();
            ShowMsg("客户端连接成功!");
        }


        void ShowMsg(string msg)
        {
            txtMsg.AppendText(msg + "\r\n");
        }




套接字-客户端:

private void btnBeginListen_Click(object sender, EventArgs e)
        {
            IPAddress address = IPAddress.Parse(txtIP.Text.Trim());
            IPEndPoint endpoint = new IPEndPoint(address, int.Parse(txtPort.Text.Trim()));
            Socket socketClient = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            socketClient.Connect(endpoint);
        }






socket方法:
相关类:IPAdress:包含了一个IP地址;IPEndPoint:包含了一对IP地主和端口号
方法:Socket()创建一个Socket;Bind()绑定一个本地的IP和端口号;Listen()让Socket监听闯入的连接尝试,并指定鉴定队列容量;Connect()初始化另一个Socket的连接;Accept()接受连接并返回一个姓的socket;Send()输出数据到Socket;Receive()从Socket中读取数据;Close()关闭Socket(销毁连接)




Windows Phone 7手机开发.Net培训、期待与您交流!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值