资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,*,第9章,网络协议与套接字编程,9,.1,进程和线程,9,.2,C#,中线程的开发,9.,3,TCP/IP,网络协议,9,.4 套接字编程技术,9,.5 数据流,9,.1,进程和线程,基本概念,进程,在,Windows,中,系统能够同时运行多个程序,每一个正在运行的程序称为一个进程,线程,同一个进程又可以分成若干个独立的执行流,我们称之为线程。,线程是操作系统向其分配处理器时间的基本单位。,线程可执行进程的任何一部分代码,包括当前由另一线程执行的部分。,并行性,(并发处理),并发处理指计算机真正的或者是表面上呈现的同时处理。,进程、线程和并行性在程序开发中的作用,程序实例(,进程的使用,),创建一个,C#Windows,应用程序,,,设计界面如图,按钮事件:,private void,buttonStart,_Click(object sender,System.,EventArgs,e),/,启动,Notepad.exe,进程。,myProcess,.Start();,private void,buttonStop,_Click(object sender,System.,EventArgs,e),Process,myProcesses,;,/,创建新的,Process,组件的数组,并将它们与指定的进,/程名称(,Notepad),的所有进程资源相关联。,myProcesses,=Process.,GetProcessesByName,(Notepad);,foreach,(Process instance in,myProcesses,),/,设置终止当前线程前等待的毫秒数,instance.,WaitForExit,(1000);,instance.,CloseMainWindow,();,private void,buttonView,_Click(object sender,System.,EventArgs,e),this.listBox1.Items.Clear();,Process processes;,/,创建,Process,类型的数组,并将它们与系统内所有进程相关联,processes=Process.,GetProcesses,();,foreach,(Process p in processes),/,将每个进程名和进程开始时间加入,listBox1,中,this.listBox1.Items.Add(p.,ProcessName,+,+p.,StartTime,.,ToShortTimeString,();,9.2,C#,中线程的开发,基本概念(操作),1.,启动线程,2.,让线程休眠,3.,销毁线程,4.,ThreadState,属性,5.,线程的优先级,6.线程池,程序实例(启动线程,),using System;,using System.Threading;,class,TestThread,public static void Main(),Thread thread1=new Thread(new,ThreadStart,(Method1);,Thread thread2=new Thread(new,ThreadStart,(Method2);,thread1.Start();,thread2.Start();,Console.Read();,public static void Method1(),for(,int,i=0;i1000;i+)Console.Write(a);,public static void Method2(),for(,int,i=0;i1000;i+),Console.Write(b);,9.3,TCP/IP,网络协议,TCP/IP,协议,实际上是一组协议的总称,它是一个4层的网络体系结构(应用层、传输层、网络层、网络接口层),这个4层的网络体系结构包括100多个相互关联的协议,由于,IP,是网络层最主要的协议,,TCP,是传输层最主要的协议,因此简称为,TCP/IP,协议,。,9.4,套接字编程技术,基本概念,IP,地址和端口,IP,地址,端口,套接字,面向连接的套接字,在面向连接的套接字中,使用,TCP,协议来建立两个,IP,地址端点之间的会话。一旦建立了这种连接,就可以在设备之间可靠的传输数据。为了建立面向连接的套接字,服务器和客户端必须分别进行编程。,面向无连接的套接字,无连接的套接字不需要在网络设备之间发送连接信息。因此,很难确定谁是服务器谁是客户机,面向连接的套接字,(,上图),面向无连接的,套接字编程(下图),Socket(),Bind(),Listen(),Accept(),Receive(),Send(),Close(),Socket(),Connect(),Send(),Receive(),Close(),Socket(),Bind(),ReceiveFrom,(),SendTo,(),Close(),Socket(),Bind(),SendTo,(),ReceiveFrom,(),Close(),9.4,套接字编程技术,基本概念,无阻塞,编程技术,无阻塞套接字,当套接字是非阻塞模式的时候,就不会一直等待一个,I/O,方法的完成。,多路传输套接字,Socket,类提供的,Select(),方法,这个方法用于多路传输多个套接字实例,以便找到一个已经准备好进行读或写的套接字。,异步套接字编程技术,9.4,套接字编程技术,程序实例一,IPEndPoint,类的使用,using System;,using System.Net;,class,TestIPEndPoint,public static void Main(),IPAddress,ip,=,IPAddress,.Parse(127.0.0.1);,IPEndPoint,iep,=new,IPEndPoint,(,ip,8000);,Console.,WriteLine,(The,IPEndPoint,is:0,iep,.,ToString,();,Console.,WriteLine,(The Address is:0,iep,.Address);,Console.,WriteLine,(The,AddressFamily,is:0,iep,.,AddressFamily,);,Console.,WriteLine,(The max port number is:0,IPEndPoint,.,MaxPort,);,Console.,WriteLine,(The min port number is:0,IPEndPoint,.,MinPort,);,Console.Read();,9.4,套接字编程技术,程序实例二使用套接字,using System;,using System.Net;,using System.Net.Sockets;,class,TestSocket,public static void Main(),IPAddress,ip,=,IPAddress,.Parse(127.0.0.1);,IPEndPoint,iep,=new,IPEndPoint,(,ip,8000);,Socket socket=new Socket(,AddressFamily,.,InterNetwork,SocketType,.Stream,ProtocolType,.,Tcp,);,Console.,WriteLine,(Blocking:0,socket.Blocking);,Console.,WriteLine,(Connected:0,socket.Connected);,socket.Bind(,iep,);,Console.,WriteLine,(Local,EndPoint,:0,socket.,LocalEndPoint,.,ToString,();,Console.Read();,9.5,数据流,基本概念,流,文件流,网络流,数据流的操作,读,写,9.5,数据流,程序实例,获取本地所有磁盘,string drives=Directory.,GetLogicalDrives,();,for(,int,i=0;idrives.Length;i+),/,左对齐,宽度5位,Console.Write(0,-5,drivesi);,输出结果类似如下形式:,A:C:D:E:,9.5,数据流,程序实例,获取,C,盘根目录下的所有子目录,string,dirs,=Directory.,GetDirectories,(C:);,for(,int,i=0;idirs.Length;i+),Console.,WriteLine,(,dirs,i);,程序实例,获取指定目录下的所有文件,string files=Directory.,GetFiles,(C:);,for(,int,i=0;ifiles.Length;i+),Console.,WriteLine,(filesi);,获取当前目录,string,currentPath,=Directory.,GetCurrentDirectory,();,程序实例,文本文件的读写,using System;,using System.IO;,public class,TestFileStream,static void Main(),StreamWriter,sw,=new,StreamWriter,(“,MyFile,.txt”,true,System.Text.Encoding.Unicode);,sw,.,WriteLine,(“,第一条语句。”);,sw,.,WriteLine,(,第二条语句。);,sw,.Close();,StreamReader sr,=new,StreamReader,(,MyFile,.txt,System.Text.Encoding.Unicode);,while(string,str,=sr.,ReadLine,()!=null)Console.,WriteLine,(,str,);,sr.Close();,Console.,ReadLine,();,
展开阅读全文