




已阅读5页,还剩18页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第9章网络协议与套接字编程 9 1进程和线程9 2C 中线程的开发9 3TCP IP网络协议9 4套接字编程技术9 5数据流 9 1进程和线程 基本概念进程在Windows中 系统能够同时运行多个程序 每一个正在运行的程序称为一个进程线程同一个进程又可以分成若干个独立的执行流 我们称之为线程 线程是操作系统向其分配处理器时间的基本单位 线程可执行进程的任何一部分代码 包括当前由另一线程执行的部分 并行性 并发处理 并发处理指计算机真正的或者是表面上呈现的同时处理 例如 一个多用户的计算机系统可以通过分时处理来获得并发 分时是指处理器在多个任务之间的切换 由于切换的速度很快 从计算机执行程序来看好象这些任务是同时进行的 当然也可以通过使用多个处理器来获得并发 即让多个处理器同时执行多个任务 对一个单处理器的计算机系统来说 单个CPU在任何时刻只能执行一个线程 操作系统通过在所有在执行的线程之间快速切换CPU 使得从观察者的角度看 许多线程像是在同时运行一样 实际上 一个线程执行了一个时间单元后 另一个线程接着执行下一个时间单元 如此反复 这就是并发 程序实例 进程的使用 创建一个C Windows应用程序 设计界面如图 例 新建一个Windows应用程序 利用Process 组件 3个按钮控件和1个listBox控件 1 名称空间usingSystem Diagnostics usingSystem Threading 2 设置Process 组件 的FileName属性为C WINDOWS 0 system32 notepad exe 记事簿 3 按钮事件 privatevoidbuttonStart Click objectsender System EventArgse 启动Notepad exe进程 process1 Start privatevoidbuttonStop Click objectsender System EventArgse Process myProcesses 创建新的Process组件的数组 并将它们与指定的进 程名称 Notepad 的所有进程资源相关联 myProcesses Process GetProcessesByName Notepad foreach ProcessinstanceinmyProcesses 设置终止当前线程前等待的毫秒数instance WaitForExit 1000 关闭记事簿instance CloseMainWindow privatevoidbuttonView Click objectsender System EventArgse this listBox1 Items Clear Process processes 创建Process类型的数组 并将它们与系统内所有进程相关联processes Process GetProcesses foreach Processpinprocesses 将每个进程名和进程开始时间加入listBox1中this listBox1 Items Add p ProcessName p StartTime ToShortTimeString 9 2C 中线程的开发 基本概念 操作 1 Start 启动线程2 Suspend 让线程休眠 挂起 用Resume 恢复3 About 销毁 终止 线程4 Resume 恢复线程构造一个线程后 必须调用Start 方法启动之 程序实例 启动线程 控制台程序usingSystem usingSystem Threading classTestThread publicstaticvoidMain Threadthread1 newThread newThreadStart Method1 Threadthread2 newThread newThreadStart Method2 thread1 Start thread2 Start Console Read publicstaticvoidMethod1 for inti 0 i 1000 i Console Write a publicstaticvoidMethod2 for inti 0 i 1000 i Console Write b 线程的优先级 当线程之间争夺CPU时间片时 CPU是按照线程的优先级给予服务的 C 应用程序中 设定了5个不同的优先级 HighestAboveNormalNormal 系统默认级 BelowNormalLowest线程优先级设置 myThead Priority ThreadPriority BelowNormal 高 低 程序实例 启动线程 控制台程序usingSystem usingSystem Threading classTestThread publicstaticvoidMain Threadthread1 newThread newThreadStart Method1 Threadthread2 newThread newThreadStart Method2 thread1 Start thread2 Start Console Read publicstaticvoidMethod1 for inti 0 i 1000 i Console Write a publicstaticvoidMethod2 for inti 0 i 1000 i Console Write b 先输出b 如何修改程序 thread2 Priority ThreadPriority AboveNormal 线程池 为每一个请求创建一个线程的开销很大 销毁一个线程也要消耗系统资源 活动的线程也消耗系统资源 太多的线程可能会导致过度的系统资源消耗而用完内存 为了防止资源不足 服务器应用程序应该采取一定的办法来限制同一时刻处理的线程数目 线程池为线程生命周期的开销问题和资源不足问题提供了很好的解决方案 线程池适用于量大短小进程的请求 因为可减少线程创建和销毁的次数 但是 若要求的线程运行时间比较长 即比创建线程时间长得多 单靠减少线程创建时间对系统效率的提高就不明显了 9 3TCP IP网络协议 TCP IP协议实际上是一组协议的总称 它是一个4层的网络体系结构 应用层 传输层 网络层 网络接口层 这个4层的网络体系结构包括100多个相互关联的协议 由于IP是网络层最主要的协议 TCP是传输层最主要的协议 因此简称为TCP IP协议 9 4套接字编程技术 基本概念IP地址和端口IP地址 bk 端口 bk 套接字是引用网络连接的特殊的文件描述符 它由3个基本要素组成 网络类型 数据传输类型 采用的网络协议 面向连接的套接字在面向连接的套接字中 使用TCP协议来建立两个IP地址端点之间的会话 一旦建立了这种连接 就可以在设备之间可靠的传输数据 为了建立面向连接的套接字 服务器和客户端必须分别进行编程 面向无连接的套接字无连接的套接字不需要在网络设备之间发送连接信息 因此 很难确定谁是服务器谁是客户机 面向连接的套接字面向无连接的套接字 Socket Bind ReceiveFrom SendTo Close Socket Bind SendTo ReceiveFrom Close 服务器 客户机 UDP服务器 UDP客户机 9 4套接字编程技术 程序实例一 IPEndPoint类的使用usingSystem Net classTestIPEndPoint publicstaticvoidMain IPAddressip IPAddress Parse 127 0 0 1 IPAddress类表示一个IP地址 一般用Parse 方法创建IPAddress的实例IPEndPointiep newIPEndPoint ip 8000 IPEndPoint用于表示指定的IP地址 端口的组合Console WriteLine TheIPEndPointis 0 iep ToString Console WriteLine TheAddressis 0 iep Address IP地址Console WriteLine TheAddressFamilyis 0 iep AddressFamily IP地址系列Console WriteLine Themaxportnumberis 0 IPEndPoint MaxPort Console WriteLine Theminportnumberis 0 IPEndPoint MinPort Console Read 9 4套接字编程技术 程序实例二 使用套接字usingSystem usingSystem Net usingSystem Net Sockets classTestSocket publicstaticvoidMain 见P202 203及表9 2 9 3的分析IPAddressip IPAddress Parse 127 0 0 1 IPEndPointiep newIPEndPoint ip 8000 Socketsocket newSocket AddressFamily InterNetwork SocketType Stream ProtocolType Tcp Console WriteLine Blocking 0 socket Blocking 阻塞TrueConsole WriteLine Connected 0 socket Connected 未连接Falsesocket Bind iep Console WriteLine LocalEndPoint 0 socket LocalEndPoint ToString Console Read 9 5数据流 基本概念流流 Stream 是一种抽象表示 代表存储和检索数据的串行设备 每次一个字节 底层的设备可以是文件 外部设备 主存 网络套接字等 通过该抽象化 不同设备可以用相同的流进行访问 如果某些代码可用于从一个文件流中读取数据 那么也可以用类似的代码从一个网络输入流中读取数据 流可分为 文件流 用于对文件的读写网络流 为了编程中使用网络流 NetworkStream 数据流的操作读写 9 5数据流 获取本地所有磁盘usingSystem IO string drives Directory GetLogicalDrives for inti 0 i drives Length i 左对齐 宽度5位Console Write 0 5 drives i Console Read 输出结果类似如下形式 A C D E 9 5数据流 staticvoidMain 构造一个StreamWriter对象 3个参数 文件名 操作方式 编码类型 StreamWritersw newStreamWriter MyFile txt true System Text Encoding Unicode sw WriteLine 第一条语句 sw WriteLine 第二条语句 关闭当前的StreamWriter对象和基础流sw Close StreamReadersr newStreamReader MyFile txt System Text Encoding Unicode stringstr while str sr ReadLine null Console WriteLine str sr Close Console ReadLine END 9 5数据流 程序实例获取C盘根目录下的所有子目录string dirs Directory GetDirectories C for inti 0 i dirs Length i Console WriteLine dirs i 程序实例获取指定目录下的所有文件string files Directory GetFiles C for inti 0 i files Length i Console WriteLine files i 获取当前目录stringcurrentPath Directory GetCurrentDirectory 程序实例文本文件的读写usingSystem usingSystem IO publicclassTestFileStream staticvoidMain St
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论