《网络协议与套接字编程.ppt》由会员分享,可在线阅读,更多相关《网络协议与套接字编程.ppt(19页珍藏版)》请在金锄头文库上搜索。
1、1第第9 9章章 网络协议与套接字编程网络协议与套接字编程 9.1 进程和线程进程和线程9.2 C#中线程的开发中线程的开发9.3 TCP/IP网络协议网络协议9.4 套接字编程技术套接字编程技术9.5 数据流数据流29.1 进程和线程进程和线程基本概念基本概念进程进程在在Windows中,系统能够同时运行多个程序,每一个正在运中,系统能够同时运行多个程序,每一个正在运行的程序称为一个进程行的程序称为一个进程 线程线程同一个进程又可以分成若干个独立的执行流,我们称之为线同一个进程又可以分成若干个独立的执行流,我们称之为线程。程。线程是操作系统向其分配处理器时间的基本单位。线程是操作系统向其分配
2、处理器时间的基本单位。线程可执行进程的任何一部分代码,包括当前由另一线程执线程可执行进程的任何一部分代码,包括当前由另一线程执行的部分。行的部分。 并行性并行性(并发处理)(并发处理)并发处理指计算机真正的或者是表面上呈现的同时处理。并发处理指计算机真正的或者是表面上呈现的同时处理。 进程、线程和并行性在程序开发中的作用进程、线程和并行性在程序开发中的作用3程序实例(程序实例(进程的使用进程的使用)创建一个创建一个C# Windows应用程序应用程序,设计界面如图设计界面如图 4按钮事件按钮事件: :private void buttonStart_Click(object sender, S
3、ystem.EventArgs e) /启动启动Notepad.exe进程。进程。 myProcess.Start(); 5private void buttonStop_Click(object sender, System.EventArgs e)Process myProcesses; /创建新的创建新的Process组件的数组,并将它们与指定的进组件的数组,并将它们与指定的进 /程名称(程名称(Notepad)的所有进程资源相关联。的所有进程资源相关联。myProcesses = Process.GetProcessesByName(Notepad); foreach (Process
4、 instance in myProcesses) /设置终止当前线程前等待的毫秒数设置终止当前线程前等待的毫秒数instance.WaitForExit(1000);instance.CloseMainWindow();6private void buttonView_Click(object sender, System.EventArgs e)this.listBox1.Items.Clear(); Process processes;/创建创建Process类型的数组,并将它们与系统内所有进程相关联类型的数组,并将它们与系统内所有进程相关联processes = Process.Get
5、Processes();foreach (Process p in processes) /将每个进程名和进程开始时间加入将每个进程名和进程开始时间加入listBox1中中 this.listBox1.Items.Add(p.ProcessName+ +p.StartTime.ToShortTimeString();79.2 C#中线程的开发中线程的开发 基本概念(操作)基本概念(操作)1. 启动线程启动线程 2. 让线程休眠让线程休眠 3. 销毁线程销毁线程 4. ThreadState属性属性 5. 线程的优先级线程的优先级 6.6.线程池线程池 8程序实例(启动线程程序实例(启动线程)u
6、sing System;using System.Threading;class TestThreadpublic 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
7、static void Method2() for (int i=0;i1000;i+) Console.Write(b);99.3 TCP/IP网络协议网络协议 TCP/IP协议协议实际上是一组协议的总称,它是实际上是一组协议的总称,它是一个一个4层的网络体系结构(应用层、传输层、网层的网络体系结构(应用层、传输层、网络层、网络接口层),这个络层、网络接口层),这个4层的网络体系结构层的网络体系结构包括包括100多个相互关联的协议,由于多个相互关联的协议,由于IP是网络层是网络层最主要的协议,最主要的协议,TCP是传输层最主要的协议,因是传输层最主要的协议,因此简称为此简称为TCP/IP协议
8、协议。 109.4 套接字编程技术套接字编程技术 基本概念基本概念IP地址和端口地址和端口IP地址地址端口端口套接字套接字 面向连接的套接字面向连接的套接字 在面向连接的套接字中,使用在面向连接的套接字中,使用TCP协议来建立两个协议来建立两个IP地址端点之间的地址端点之间的会话。一旦建立了这种连接,就可以在设备之间可靠的传输数据。为会话。一旦建立了这种连接,就可以在设备之间可靠的传输数据。为了建立面向连接的套接字,服务器和客户端必须分别进行编程。了建立面向连接的套接字,服务器和客户端必须分别进行编程。 面向无连接的套接字面向无连接的套接字 无连接的套接字不需要在网络设备之间发送连接信息。因此
9、,很难确无连接的套接字不需要在网络设备之间发送连接信息。因此,很难确定谁是服务器谁是客户机定谁是服务器谁是客户机 11面向连接的套接字面向连接的套接字(上图)上图)面向无连接的面向无连接的套接字编程(下图)套接字编程(下图)Socket()Bind()Listen()Accept()Receive()Send()Close()Socket()Connect()Send()Receive()Close()Socket()Bind()ReceiveFrom()SendTo()Close()Socket()Bind()SendTo()ReceiveFrom()Close()129.4 套接字编程技术
10、套接字编程技术基本概念基本概念无阻塞无阻塞编程技术编程技术 无阻塞套接字无阻塞套接字当套接字是非阻塞模式的时候,就不会一直等当套接字是非阻塞模式的时候,就不会一直等待一个待一个I/OI/O方法的完成。方法的完成。 多路传输套接字多路传输套接字 SocketSocket类提供的类提供的Select()Select()方法,这个方法用于方法,这个方法用于多路传输多个套接字实例,以便找到一个已经多路传输多个套接字实例,以便找到一个已经准备好进行读或写的套接字。准备好进行读或写的套接字。 异步套接字编程技术异步套接字编程技术 139.4 套接字编程技术套接字编程技术程序实例一程序实例一IPEndPoi
11、nt类的使用类的使用using System;using System.Net;class TestIPEndPointpublic 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
12、 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();149.4 套接字编程技术套接字编程技术程序实例二程序实例二使用套接字使用套接字using System;using System.Net;using System.Net.Sockets;class TestSocketpublic static void Mai
13、n()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.WriteLi
14、ne(Local EndPoint: 0,socket.LocalEndPoint.ToString(); Console.Read();159.5 数据流数据流 基本概念基本概念流流文件流文件流网络流网络流数据流的操作数据流的操作读读写写169.5 数据流数据流程序实例程序实例获取本地所有磁盘获取本地所有磁盘 string drives=Directory.GetLogicalDrives();for(int i=0;idrives.Length;i+)/左对齐,宽度左对齐,宽度5位位Console.Write(0,-5,drivesi);输出结果类似如下形式:输出结果类似如下形式: A:
15、C: D: E: 179.5 数据流数据流程序实例程序实例获取获取C盘根目录下的所有子目录盘根目录下的所有子目录 string dirs=Directory.GetDirectories(C:);for(int i=0;idirs.Length;i+) Console.WriteLine(dirsi);18程序实例程序实例获取指定目录下的所有文件获取指定目录下的所有文件string files=Directory.GetFiles(C:);for(int i=0;ifiles.Length;i+)Console.WriteLine(filesi);获取当前目录获取当前目录string curr
16、entPath=Directory.GetCurrentDirectory();19程序实例程序实例文本文件的读写文本文件的读写using System;using System.IO;public class TestFileStreamstatic 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();