上网端口是哪个?只想让公司员工上网收发信件,想把其它端口封掉!

sunyuegang 2003-10-18 07:26:55
上网端口是哪个?只想让公司员工上网收发信件,想把其它端口封掉!
...全文
109 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
soaringlee 2003-10-18
  • 打赏
  • 举报
回复
用防火墙比较上手!
dbjtmax 2003-10-18
  • 打赏
  • 举报
回复
上网,80
邮件;25,110
jekeylove 2003-10-18
  • 打赏
  • 举报
回复
本人强烈建议你使用win 2000 操作系统
icuc88 2003-10-18
  • 打赏
  • 举报
回复
封住443,hotmail上不了,MSN上不了
封住25/110,Outlook Express不能用了。
icuc88 2003-10-18
  • 打赏
  • 举报
回复
ISA代理。
ravenkatte 2003-10-18
  • 打赏
  • 举报
回复
用防火墙封端口,或者用代理软件,或者使用Windows 2000的TCP/IP筛选
luninggzj 2003-10-18
  • 打赏
  • 举报
回复
请教用什么软件可以封掉其它的端口?
怎么找出这些端口?
很菜不好意思。
ravenkatte 2003-10-18
  • 打赏
  • 举报
回复
只开放80即可
Aven_fudan 2003-10-18
  • 打赏
  • 举报
回复
上网收发只要80就够了
icuc88 2003-10-18
  • 打赏
  • 举报
回复
http:80/443

email: 25/110
小李飞砖 2003-10-18
  • 打赏
  • 举报
回复
80
◆ 01.htm 1、怎么用mscomm控件检测modem是否与计算机联接正确?2、如何用mscomm挂断modem与别的电话机间的连接?(已接通) ◆ 02.htm CWinInetConnection---一个封装了WinInet API函数的类 ◆ 03.htm MODEM通讯意外处理 ◆ 04.htm MsComm 文字传输 ◆ 05.htm PING一个IP地址(向它发送一个数据包并等待回应) ◆ 06.htm SMTP协议简介 (Simple Mail Transfer Protocol) ◆ 07.htm VB5.0 中远程数据库的访问 ◆ 08.htm VB下如何编写CRC校验程序 ◆ 09.htm VB中Winsock控制的UDP协议的使用 ◆ 10.htm Visual Basic 6中发送邮件的新方法 ◆ 11.htm Visual Basic通信程序设计 ◆ 12.htm Whois 示例程序 ◆ 13.htm Winsock Terminal示例程序 ◆ 14.htm WinSock断开导致客户端问题 ◆ 15.htm 把Outlook信箱中的附件另存为 ◆ 16.htm 保证连网计算机时间同步 ◆ 17.htm 编写网络寻呼机 ◆ 18.htm 编制自已的电话录音小程序 ◆ 19.htm 程序中如何启动默认的拨号连接 ◆ 20.htm 程序中如何启动默认的拨号连接? ◆ 21.htm 打开器并进入指定网址 ◆ 22.htm 打开一个直接到自己主页的器 ◆ 23.htm 得到用户的IP地址 ◆ 24.htm 电话拨号 ◆ 25.htm 电子邮件的标准格式 (RFC 822) ◆ 26.htm 断开拨号网络的连接 ◆ 27.htm 断开与 Internet 的连接 ◆ 28.htm 发送电子邮件附件 ◆ 29.htm 发送电子邮件附件1 ◆ 30.htm 发送电子邮件附件2 ◆ 31.htm 发送电子邮件附件3 ◆ 32.htm 发送电子邮件附件4 ◆ 33.htm 获得用户网络登录名 ◆ 34.htm 基 于Win95 的VB5 串 口 通 信 程 序 ◆ 35.htm 基于Win95的VB5串口通信程序 ◆ 36.htm 几个设置IE的API ◆ 37.htm 检测运程数据传送的断线 ◆ 38.htm 简单的聊天程序 ◆ 39.htm 简单电子邮件发送程序 ◆ 40.htm 建立拨号联接 ◆ 41.htm 将所有窗口最小化 ◆ 42.htm 利用IE控件访问Internet ◆ 43.htm 利用IE控件设计简易器 ◆ 44.htm 利用Mscomm32控件判断MODEM是否打开,或者正在工作,并且判断拨号时是否遇忙音 ◆ 45.htm 利用TAPI进行电话拨号 ◆ 46.htm 利用VB访问Internet ◆ 47.htm 利用VB设计聊天室 ◆ 48.htm 利用Visual Basic实现无线通讯 ◆ 49.htm 利用Winsock控件实现局域网通信 ◆ 50.htm 强制一个本地或远程NT系统关闭 ◆ 51.htm 取得网卡序列号 ◆ 52.htm 如何从 Internet 上取回某一个网页的內容? ◆ 53.htm 如何检测是否已连接到Internet? ◆ 54.htm 如何利用Winsock控件编写自己的Internet程序 ◆ 55.htm 如何每天抓取 Internet 上某一个网页中的图片来更换桌面的壁纸? ◆ 56.htm 如何启动拨号网路中的连线? ◆ 57.htm 如何使用MSCOMM32.OCX发送大于80H的字符,可否给个示例程序 ◆ 58.htm 如何通过VB获取网卡地址 ◆ 59.htm 如何用VB打开默认器或默认发信程序? ◆ 60.htm 如何用Visual Basic编写小型的网络系统 ◆ 61.htm 如何在程序中启动 NT 的【拨号连接】对话框 ◆ 62.htm 如何在程序中启动 NT 的【拨号连接】对话框? ◆ 63.htm 如何在网页上使用 VB5 制作的 ActiveX 控件? ◆ 64.htm 如何中断【拨号网络连接】 ◆ 65.htm 设计Browser及FTP程序 ◆ 66.htm 设计Chat程序 ◆ 67.htm 设计E-mail程序 ◆ 68.htm 设置计算机名称 ◆ 69.htm 使用VB获得一页的HTML代码 ◆ 70.htm 使用VB收发电子邮件 ◆ 71.htm 使用标签控件调出器 ◆ 72.htm 使用超链接和发送Email ◆ 73.htm 使用器的文件复制对话框 ◆ 74.htm 输入/输出篇 ◆ 75.htm 通过WnetEnumResource函数获得网络资源 ◆ 76.htm 通往 Internet 的捷径 ◆ 77.htm 显示计算机的名称 ◆ 78.htm 用 MAPI 控件实现发送邮件 ◆ 79.htm 用 WinSock 控件下载文件 ◆ 80.htm 用 Winsock 实现聊天的程序 ◆ 81.htm 用Internet Transfer编写FTP程序 ◆ 82.htm 用Sockets发送电子邮件 ◆ 83.htm 用VB 创 建 自 己 的 通 信 程 序 ◆ 84.htm 用VB5.0开发通信软件的技巧 ◆ 85.htm 用VB5开发IE ◆ 86.htm 用VB编写网络寻呼 ◆ 87.htm 用VB编写小型的网络系统 ◆ 88.htm 用VB创建自己的通信程序 ◆ 89.htm 用VB构建Internet的应用[微软提供] ◆ 90.htm 用VB开发标准CGI程序 ◆ 91.htm 用VB实现客户——服务器(TCP IP)编程实例 ◆ 92.htm 用VB实现客户服务器(TCP、IP)编程实例 ◆ 93.htm 用VB实现聊天讨论室和点对点会话 ◆ 94.htm 用VB写一个定时PING某IP的程序 ◆ 95.htm 用VB制作器 ◆ 96.htm 用Visual Basic 5.0设计E-mail程序(MAPI) ◆ 97.htm 用Visual Basic6.0编写客户服务器程序 ◆ 98.htm 用Visual Basic创建FTP组件 ◆ 99.htm 用Visual Basic开发数据库器 ◆ 100.htm 用Visual Basic轻松地设计Browser及Ftp程序 ◆ 101.htm 用Winsock控件发信Email ◆ 102.htm 用Winsock控件实现文件的下载 ◆ 103.htm 用Winsock实现点对点通信 ◆ 104.htm 邮件检查程序(二) ◆ 105.htm 邮件检查程序(一) ◆ 106.htm 在VB程序中怎样挂断拨号网络 ◆ 107.htm 在VB中操纵OLE服务器应用程序 ◆ 108.htm 在VB中利用UDP协议编写聊天程序 ◆ 109.htm 在VB中模拟实现邮件传输 ◆ 110.htm 在VB中如何得到网络中某一台电脑(电脑名)的网卡地质? (自己的) ◆ 111.htm 在VB中实现文件上传 ◆ 112.htm 在VB中实现文件上载 ◆ 113.htm 在VB中使用UDP协议 ◆ 114.htm 在VB中用Outlook发电子邮件 ◆ 115.htm 在WindowsNT网络中广播消息 ◆ 116.htm 在程序中打开 Internet 拨号连接窗口 ◆ 117.htm 在一个单位内部或通过广域协议(如X.25)互联的行业内部都有几十或上万台计算机互联,用Intranet虽然可以建立聊天室,但实现点对点实时对话却比较困难。本人用Winsock和VB自制了一套聊天室和对话系统,特拿来供同行们参考。 ◆ 118.htm 在应用中集成器 ◆ 119.htm 在桌面上建立一个 Internet 快捷键 ◆ 120.htm 怎样接收电子邮件(POP3协议简介) ◆ 121.htm 怎样用VB得知系统当前是否处于internet链结状态 ◆ 122.htm 制作自己的网络搜索软件 ◆ 123.htm 自动更新工作站的应用程序 ◆ 124.htm 自己的IE——用VB制作器 ◆ 125.htm HTTP协议(学习笔记) ◆ 126.htm HTTP协议四--关于Chunked编码 ◆ 127.htm IE器完全控制 ◆ 128.htm OICQ服务器系统通讯协议 ◆ 129.htm POP3协议的基本命令 ◆ 130.htm RAS API上的其他Function ◆ 131.htm VB + API 获取 IE 的 “代理服务器” 配制 ◆ 132.htm vb调用winInet API接口post数据到指定的url ◆ 133.htm vb开发通信软件 ◆ 134.htm vb设计数据库电子邮件程序(1) ◆ 135.htm vb设计数据库电子邮件程序(2) ◆ 136.htm vb设计数据库电子邮件程序(3) ◆ 137.htm vb设计数据库电子邮件程序(4) ◆ 138.htm vb设计数据库电子邮件程序(5) ◆ 139.htm vb设计数据库电子邮件程序(6) ◆ 140.htm VB实现应用程序在局域网上自动更新 ◆ 141.htm VB邮件检查程序 ◆ 142.htm vb中从域名得到IP及从IP得到域名 ◆ 143.htm VB中检测是否连网 ◆ 144.htm WebClass实现动态WEB编程之理论篇 ◆ 145.htm Winsocket网络编程谈 ◆ 146.htm Winsock编程框架 ◆ 147.htm Winsock错误代码一览表 ◆ 148.htm 程式自动呼叫拨号网络(RAS API) ◆ 149.htm 打开一个超连接 ◆ 150.htm 得到登入windows 的人的id ◆ 151.htm 访问Internet并调用Explorer ◆ 152.htm 非同步文件下载类 ◆ 153.htm 给Outlook的所有用户发送信件 ◆ 154.htm 获得网卡的MAC地址 ◆ 155.htm 基于WinSock的小型网络管理系统及其实现 ◆ 156.htm 检测是否连接到Internet ◆ 157.htm 检测网络是否连通 ◆ 158.htm 建立Web的超链接树形图 ◆ 159.htm 建立你自己的器-Properties ◆ 160.htm 建立你自己的器-查看源文件 ◆ 161.htm 建立你自己的器-打印 ◆ 162.htm 建立你自己的器-打印设置 ◆ 163.htm 建立你自己的器-发送到FontPage ◆ 164.htm 建立你自己的器-发送到Visual Interdev ◆ 165.htm 建立你自己的器-发送到软盘 ◆ 166.htm 建立你自己的器-复制 ◆ 167.htm 建立你自己的器-另存为 ◆ 168.htm 建立你自己的器-全选 ◆ 169.htm 建立你自己的器-页面设置 ◆ 170.htm 开发通信软件的技术与技巧 ◆ 171.htm 开发网络应用的5个技巧 ◆ 172.htm 利用RAS调用在VB6.0中实现拨号上网 ◆ 173.htm 利用VB提取HTML文件中的EMAIL地址 ◆ 174.htm 枚举出局域网上所有网络资源 ◆ 175.htm 面向Internet的开发工具 ◆ 176.htm 你也可以YAI--VB5中Winsock控件的使用 ◆ 177.htm 判断一个文件是否在IE的缓存中 ◆ 178.htm 启动拨号网络中的连接 ◆ 179.htm 浅谈HTTP协议(二)--返回值 ◆ 180.htm 浅谈HTTP协议(一)--结构 ◆ 181.htm 如何利用 WebBrowser 控件显示 .GIF 动画? ◆ 182.htm 如何映射(中断网络磁盘) ◆ 183.htm 设计E-mail的接收部分 ◆ 184.htm 设置器默认网址 ◆ 185.htm 实现端口端口的聊天 ◆ 186.htm 使用ASP建立Http组件 ◆ 187.htm 使用VB编写纯ASP程序 ◆ 188.htm 使用vb获取网上邻居里的计算机名 ◆ 189.htm 使用VB建立Web Server ◆ 190.htm 使用Visual Basic开发通讯软件 ◆ 191.htm 使用资源工具包执行本地和远程重新启动 ◆ 192.htm 谈谈远程控制中关于搜索、控制计算机的功能 ◆ 193.htm 压缩 Html ◆ 194.htm 用ASP、VB和XML建立互联网应用程序(1) ◆ 195.htm 用ASP、VB和XML建立互联网应用程序(2) ◆ 196.htm 用ASP、VB和XML建立互联网应用程序(3) ◆ 197.htm 用ASP、VB和XML建立互联网应用程序(4) ◆ 198.htm 用COMMUNICATION控件进行数据采集(学习笔记) ◆ 199.htm 用OLE自动化Outlook ◆ 200.htm ActiveX控件用于DHTML开发 ◆ 201.htm 用VB编写ActiveX DLL实现ASP编程 ◆ 202.htm 用VB编写Windows CGI应用程序 ◆ 203.htm 用VB编写标准CGI程序(上) ◆ 204.htm 用VB编写标准CGI程序(下) ◆ 205.htm 用VB编写收发电子邮件程序 ◆ 206.htm 用VB编写网络监控软件 ◆ 207.htm 用VB编写异步多线程下载程序 ◆ 208.htm 用VB导入导出IE器收藏夹 ◆ 209.htm 用VB定制合路器 ◆ 210.htm 用VB和XML建立集中式应用程序 ◆ 211.htm 用VB将Html转换为文本文件 ◆ 212.htm 用VB开发分布式应用 ◆ 213.htm 用VB设计基于代理服务器的网络计费系统 ◆ 214.htm 用VB制作文件下载程序 ◆ 215.htm 用Visual Basic 实现无线通讯 ◆ 216.htm 用Winsock制作一套聊天室和对话系统 ◆ 217.htm 远程共享显示及声音的实现 ◆ 218.htm 远程启动机器ABC API解决方案 ◆ 219.htm 远程启动机器ABC WMI解决方案 ◆ 220.htm 在VB5中利用Winsock和msDNS控件进行 ◆ 221.htm 找出计算机上当前登录入网的用户 ◆ 222.htm 用VB5 Winsock控件创建TCP(IP)客户机 服务器程序
文库帮手网 www.365xueyuan.com 免费帮下载 百度文库积分 资料 本文由pengliuhua2005贡献 doc文档可能在WAP端浏览体验不佳。建议您优先选择TXT,或下载源文件到本机查看。 51 单片机设计跑马灯的程序用(c 语言)编写 P1 口接 8 个发光二极管共阳,烧入下面程序 #include unsigned char i; unsigned char temp; unsigned char a,b; void delay(void) { unsigned char m,n,s; for(m=20;m>0;m--) for(n=20;n>0;n--) for(s=248;s>0;s--); } void main(void) { while(1) { temp=0xfe; P1=temp; delay(); for(i=1;i<8;i++) { a=temp(8-i); P1=a|b; delay(); } for(i=1;i>i; b=temp<= 4000 ){ us250 = 0; if( ++s1 >= 10 ){ s1 = 0; if( ++s10 >= 6 ) s10 = 0; if( key10 == 1 ){ //等松键 if( P3.2 == 1 ) key10=0; } //未按键 37. else{ 38. 39. 40. 41. if( P3.2 == 0 ){ key10 = 1; if( ++s10 >= 6 ) s10 = 0; break; //结束“循环 2”,修改显示 42. 43. 44. 45. 46. } } //按个位键处理 P3.3 = 1; //P3.3 作为输入,先要输出高电平 if( key1 == 1 ) //等松键 47. { if( P3.3 == 1 ) key1=0; } 48. 49. 50. 51. 52. 53. 54. 55. } } //循环 2’end }//循环 1’end } else { //未按键 if( P3.3 == 0 ){ key1 = 1; if( ++s1 >= 10 ) s1 = 0; break; //结束“循环 2”,修改显示 56. }//main’end 第三节: 第三节:十字路口交通灯 如果一个单位时间为 1 秒,这里设定的十字路口交通灯按如下方式四个步骤循环工作: 60 个单位时间,南北红,东西绿;λ 10 个单位时间,南北红,东西黄;λ 60 个单位时间,南北绿,东西红;λ 10 个单位时间,南北黄,东西红;λ 解:用 P1 端口的 6 个引脚控制交通灯,高电平灯亮,低电平灯灭。 代码 1. 2. 3. 4. 5. 6. 7. 8. 9. #include //sbit 用来定义一个符号位地址,方便编程,提高可读性,和可移植性 sbit SNRed =P1^0; //南北方向红灯 //南北方向黄灯 //南北方向绿灯 //东西方向红灯 //东西方向黄灯 //东西方向绿灯 sbit SNYellow =P1^1; sbit SNGreen =P1^2; sbit EWRed =P1^3; sbit EWYellow =P1^4; sbit EWGreen =P1^5; /* 用软件产生延时一个单位时间 */ 10. void Delay1Unit( void ) 11. { 12. 13. 14. unsigned int i, j; for( i=0; i<1000; i++ ) for( j<0; j= 8 ) i=0; 12. } 13. void Timer0IntRoute( void ) interrupt 1 14. { 15. 16. TL0 = -1000; //由于 TL0 只有 8bits,所以将(-1000)低 8 位赋给 TL0 TH0 = (-1000)>>8; //取(-1000)的高 8 位赋给 TH0,重新定时 1ms 17. 18. } DisplayBrush(); 19. void Timer0Init( void ) 20. { TMOD=(TMOD & 0xf0) | 0x01; //初始化,定时器 T0,工作方式 1 21. 22. 23. 24. 25. } 26. void Display( unsigned char index, unsigned char dataValue ){ DisBuf[ inde x ] = dataValue; } 27. void main( void ) 28. { 29. unsigned char i; 30. for( i=0; i>8; TR0 = 1; ET0 = 1; //允许 T0 开始计数 //允许 T0 计数溢出时产生中断请求 第五节:键盘驱动 第五节: 指提供一些函数给任务调用,获取按键信息,或读取按键值。 定义一个头文档 ,描述可用函数,如下: 代码 1. 2. 3. 4. 5. 6. 7. #ifndef _KEY_H_ #define _KEY_H_ //防止重复引用该文档,如果没有定义过符号 _KEY_H_,则编译下面语句 防止重复引用该文档, , 防止重复引用该文档 //只要引用过一次,即 #include ,则定义符号 _KEY_H_ 只要引用过一次, 只要引用过一次 , unsigned char keyHit( void ); //如果按键,则返回非0,否则返回0 unsigned char keyGet( void ); //读取按键值,如果没有按键则等待到按键为止 void keyPut( unsigned char ucKeyVal ); //保存按键值 ucKeyVal 到按键缓冲队列末 void keyBack( unsigned char ucKeyVal ); //退回键值 ucKeyVal 到按键缓冲队列首 #endif 定义函数体文档 KEY.C,如下: 代码 1. 2. 3. #include “key.h” #define KeyBufSize 16 //定义按键缓冲队列字节数 定义按键缓冲队列字节数 unsigned char KeyBuf[ KeyBufSize ]; //定义一个无符号字符数组作为按键缓冲队列。该队列为 先进 4. 5. 6. 7. 8. 9. 10. //先出,循环存取,下标从0到 KeyBufSize-1 unsigned char KeyBufWp=0; //作为数组下标变量,记录存入位置 unsigned char KeyBufRp=0; //作为数组下标变量,记录读出位置 //如果存入位置与读出位置相同,则表明队列中无按键数据 unsigned char keyHit( void ) { if( KeyBufWp == KeyBufRp ) return( 0 ); else return( 1 ); } 11. unsigned char keyGet( void ) 12. { unsigned char retVal; //暂存读出键值 13. while( keyHit()==0 ); //等待按键,因为函数 keyHit()的返回值为 0 表示无按键 14. retVal = KeyBuf[ KeyBufRp ]; //从数组中读出键值 15. if( ++KeyBufRp >= KeyBufSize ) KeyBufRp=0; //读位置加1, 超出队列则循环回初始位置 16. 17. } 18. 19. void keyPut( unsigned char ucKeyVal ) 20. { KeyBuf[ KeyBufWp ] = ucKeyVal; //键值存入数组 21. if( ++KeyBufWp >= KeyBufSize ) KeyBufWp=0; //存入位置加1, 超出队列则循环回初始位置 return( retVal ); 22. } 23. 由于某种原因,读出的按键,没有用,但其它任务要用该按键,但传送又不方便。此时可以退回按键队列。 就如取错了信件,有必要退回一样 24. void keyBack( unsigned char ucKeyVal ) 25. { 26. 27. 如果 KeyBufRp=0; 减 1 后则为 FFH,大于 KeyBufSize,即从数组头退回到数组尾。或者由于干扰使得 KeyBufRp 超出队列位置,也要调整回到正常位置, 28. */ 29. if( --KeyBufRp >= KeyBufSize ) KeyBufRp=KeyBufSize-1; 30. KeyBuf[ KeyBufRp ] = ucKeyVal; //回存键值 31. } 下面渐进讲解键盘物理层的驱动。 电路共同点:P2 端口接一共阴数码管,共阴极接 GND,P2.0 接 a 段、P2.1 接 b 段、…、P2.7 接 h 段。 软件共同点:code unsigned char Seg7Code[10] 是七段数码管共阴编码表。 Code unsigned char Seg7Code[16]= // 0 1 2 3 4 5 6 7 8 9 A b C d E F {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71}; 例一:P1.0 接一按键到 GND,键编号为‘6’,显示按键。 代码 1. 2. 3. 4. 5. 6. 7. 8. 9. #include #include “KEY.H” void main( void ) { P1_0 = 1; //作为输入引脚,必须先输出高电平 while( 1 ) //永远为真,即死循环 { if( P1_0 == 0 ) //如果按键,则为低电平 { keyPut( 6 ); //保存按键编号值为按键队列 while( P1_0 == 0 ); //如果一直按着键,则不停地执行该循环,实际是等待松键 } 10. if( keyHit() != 0 ) //如果队列中有按键 11. P2=Seg7Code[ keyGet() ]; //从队列中取出按键值,并显示在数码管上 12. 13. } } 例二:在例一中考虑按键 20ms 抖动问题。 代码 1. 2. 3. 4. 5. 6. 7. 8. 9. #include #include “KEY.H” void main( void ) { P1_0 = 1; //作为输入引脚,必须先输出高电平 while( 1 ) //永远为真,即死循环 { if( P1_0 == 0 ) //如果按键,则为低电平 { delay20ms(); //延时 20ms,跳过接下抖动 keyPut( 6 ); //保存按键编号值为按键队列 while( P1_0 == 0 ); //如果一直按着键,则不停地执行该循环,实际是等待松键 10. delay20ms(); //延时 20ms,跳过松开抖动 11. } 12. if( keyHit() != 0 ) //如果队列中有按键 13. P2=Seg7Code[ keyGet() ]; //从队列中取出按键值,并显示在数码管上 14. 15. } } 例三:在例二中考虑干扰问题。即小于 20ms 的负脉冲干扰。 代码 1. 2. 3. 4. 5. 6. #include #include “KEY.H” void main( void ) { P1_0 = 1; //作为输入引脚,必须先输出高电平 while( 1 ) //永远为真,即死循环 { if( P1_0 == 0 ) //如果按键,则为低电平 7. 8. 9. 10. { delay20ms(); //延时 20ms,跳过接下抖动 if( P1_0 == 1 ) continue; //假按键 keyPut( 6 ); //保存按键编号值为按键队列 while( P1_0 == 0 ); //如果一直按着键,则不停地执行该循环,实际是等待松键 11. delay20ms(); //延时 20ms,跳过松开抖动 12. } 13. if( keyHit() != 0 ) //如果队列中有按键 14. P2=Seg7Code[ keyGet() ]; //从队列中取出按键值,并显示在数码管上 15. 16. } } 例四:状态图编程法。通过 20ms 周期中断,扫描按键。 代码 采用晶体为 12KHz 时,指令周期为 1ms(即主频为 1KHz),这样 T0 工作在定时器方式 2,8 位自动重载。 计数值为 20,即可产生 20ms 的周期性中断,在中断服务程序中实现按键扫描 2. 3. 4. 5. 6. 7. 8. 9. #include #include “KEY.H” void main( void ) { TMOD = (TMOD & 0xf0 ) | 0x02; //不改变 T1 的工作方式,T0 为定时器方式 2 TH0 = -20; TL0=TH0; TR0=1; //计数周期为 20 个主频脉,即 20ms //先软加载一次计数值 //允许 T0 开始计数 //允许 T0 计数溢出时产生中断请求 //允许 CPU 响应中断请求 1. 10. ET0=1; 11. EA=1; 12. while( 1 ) //永远为真,即死循环 13. { 14. if( keyHit() != 0 ) //如果队列中有按键 15. P2=Seg7Code[ keyGet() ]; //从队列中取出按键值,并显示在数码管上 16. 17. } 18. void timer0int( void ) interrupt 1 //20ms;T0 的中断号为 1 19. { static unsigned char sts=0; 20. P1_0 = 1; //作为输入引脚,必须先输出高电平 } 21. switch( sts ) 22. 23. 24. { case 0: if( P1_0==0 ) sts=1; break; //按键则转入状态 1 case 1: //假按错,或干扰,回状态 0 25. if( P1_0==1 ) sts=0; 26. else{ sts=2; keyPut( 6 ); } //确实按键,键值入队列,并转状态 2 27. break; 28. case 2: if( P1_0==1 ) sts=3; break; //如果松键,则转状态 3 29. 30. 31. 32. 33. } } case 3: if( P1_0==0 ) sts=2; else sts=0; //假松键,回状态 2 //真松键,回状态 0,等待下一次按键过程 例五:状态图编程法。 代码 如果采用晶体为 12MHz 时,指令周期为 1us(即主频为 1MHz),要产生 20ms 左右的计时,则计数值达到 20000,T0 工作必须为定时器方式 1,16 位非自动重载,即可产生 20ms 的周期性中断,在中断服务程序中 实现按键扫描 2. 3. 4. 5. 6. 7. 8. 9. #include #include “KEY.H” void main( void ) { TMOD = (TMOD & 0xf0 ) | 0x01; //不改变 T1 的工作方式,T0 为定时器方式 1 TL0 = -20000; TH0 = (-20000)>>8; TR0=1; //计数周期为 20000 个主频脉,自动取低 8 位 //右移 8 位,实际上是取高 8 位 1. //允许 T0 开始计数 //允许 T0 计数溢出时产生中断请求 //允许 CPU 响应中断请求 10. ET0=1; 11. EA=1; 12. while( 1 ) //永远为真,即死循环 13. { 14. if( keyHit() != 0 ) //如果队列中有按键 15. P2=Seg7Code[ keyGet() ]; //从队列中取出按键值,并显示在数码管上 16. 17. } 18. void timer0int( void ) interrupt 1 //20ms;T0 的中断号为 1 19. { static unsigned char sts=0; 20. TL0 = -20000; 21. TH0 = (-20000)>>8; 22. P1_0 = 1; //方式 1 为软件重载 //右移 8 位,实际上是取高 8 位 } //作为输入引脚,必须先输出高电平 23. switch( sts ) 24. 25. 26. { case 0: if( P1_0==0 ) sts=1; break; //按键则转入状态 1 case 1: //假按错,或干扰,回状态 0 27. if( P1_0==1 ) sts=0; 28. else{ sts=2; keyPut( 6 ); } //确实按键,键值入队列,并转状态 2 29. break; 30. 31. 32. 33. case 2: if( P1_0==1 ) sts=3; break; //如果松键,则转状态 3 case 3: if( P1_0==0 ) sts=2; else sts=0; //假松键,回状态 2 //真松键,回状态 0,等待下一次按键过程 34. 35. } } 例六:4X4 按键。 代码 由 P1 端口的高 4 位和低 4 位构成 4X4 的矩阵键盘, 本程序只认为单键操作为合法, 同时按多键时无效。 这样下面的 X,Y 的合法值为 0x7, 0xb, 0xd, 0xe, 0xf,通过表 keyCode 影射变换可得按键值 1. 2. 3. 4. 5. 6. 7. 8. #include #include “KEY.H” unsigned char keyScan( void ) //返回 0 表示无按键,或无效按键,其它值为按键编码值 { code unsigned char keyCode[16]= /0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0xA, 0xB, 0xC, 0xD, 0xE, 0 xF 9. { 0, }; 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 3, 4, 0 10. unsigned char x, y, retVal; 11. P1=0x0f; 12. x=P1&0x0f; 13. P1=0xf0; //低四位输入,高四位输出 0 //P1 输入后,清高四位,作为 X 值 //高四位输入,低四位输出 0 14. y=(P1 >> 4) & 0x0f; //P1 输入后移位到低四位,并清高四位,作为 Y 值 15. retVal = keyCode[x]*4 + keyCode[y]; //根据本公式倒算按键编码 16. if( retVal==0 ) return(0); else return( retVal-4 ); 17. } 18. //比如按键‘1’,得 X=0x7,Y=0x7,算得 retVal= 5,所以返回函数值 1。 19. //双如按键‘7’,得 X=0xb,Y=0xd,算得 retVal=11,所以返回函数值 7。 20. void main( void ) 21. { 22. TMOD = (TMOD & 0xf0 ) | 0x01; //不改变 T1 的工作方式,T0 为定时器方式 1 23. TL0 = -20000; 24. TH0 = (-20000)>>8; 25. TR0=1; 26. ET0=1; 27. EA=1; //计数周期为 20000 个主频脉,自动取低 8 位 //右移 8 位,实际上是取高 8 位 //允许 T0 开始计数 //允许 T0 计数溢出时产生中断请求 //允许 CPU 响应中断请求 28. while( 1 ) //永远为真,即死循环 29. { 30. if( keyHit() != 0 ) //如果队列中有按键 31. P2=Seg7Code[ keyGet() ]; //从队列中取出按键值,并显示在数码管上 32. 33. } 34. void timer0int( void ) interrupt 1 //20ms;T0 的中断号为 1 } 35. { static unsigned char sts=0; 36. TL0 = -20000; 37. TH0 = (-20000)>>8; 38. P1_0 = 1; //方式 1 为软件重载 //右移 8 位,实际上是取高 8 位 //作为输入引脚,必须先输出高电平 39. switch( sts ) 40. 41. 42. { case 0: if( keyScan()!=0 ) sts=1; break; //按键则转入状态 1 case 1: //假按错,或干扰,回状态 0 43. if( keyScan()==0 ) sts=0; 44. else{ sts=2; keyPut( keyScan() ); } //确实按键,键值入队列,并转状态 2 45. break; 46. 47. 48. 49. 50. 51. } } case 2: if(keyScan()==0 ) sts=3; break; //如果松键,则转状态 3 case 3: if( keyScan()!=0 ) sts=2; else sts=0; //假松键,回状态 2 //真松键,回状态 0,等待下一次按键过程 第六节: 第六节:低频频率计 实例目的:学时定时器、计数器、中断应用 说明:选用 24MHz 的晶体,主频可达 2MHz。用 T1 产生 100us 的时标,T0 作信号脉冲计数器。假设 晶体频率没有误差,而且稳定不变(实际上可达万分之一);被测信号是周期性矩形波(正负脉冲宽 度都不能小于 0.5us),频率小于 1MHz,大于 1Hz。要求测量时标 1S,测量精度为 0.1%。 解:从测量精度要求来看,当频率超过 1KHz 时,可采用 1S 时标内计数信号脉冲个数来测量信号频, 而信号频率低于 1KHz 时,可以通过测量信号的周期来求出信号频率。两种方法自动转换。 对于低于 1KHz 的信号,信号周期最小为 1ms,也就是说超过 1000us,而我们用的定时器计时脉冲周 期为 0.5us,如果定时多计或少计一个脉冲,误差为 1us,所以相对误差为 1us/1000us=0.1%。信号 周期越大,即信号频率越低,相对误差就越小。 从上面描述来看,当信号频率超过 1KHz 后,信号周期就少于 1000us,显然采用上面的测量方法,不 能达到测量精度要求,这时我们采用 1S 单位时间计数信号的脉冲个数,最少能计到 1000 个脉冲,由 于信号频率不超过 1MHz,而我们定时脉冲为 2MHz,最差多计或少计一个信号脉冲,这样相对误差为 1/1000,可见信号频率越高,相对误差越小。 信号除输入到 T1(P3.5)外,还输入到 INT1(P3.3)。 代码 //对 100us 时间间隔单位计数,即有多少个 100us。 1. 2. 3. 4. 5. 6. 7. unsigned int us100; unsigned char Second; unsigned int K64; unsigned char oldT0; //对 64K 单位计数,即有多少个 64K unsigned int oldus, oldK64, oldT1; unsigned long fcy; bit HighLow=1; //存放频率值,单位为 Hz //1:表示信号超过 1KHz;0:表示信号低于 1KHz。 8. 9. 10. void InitialHigh( void ) { IE=0; IP=0; HighLow=1; 11. TMOD = (TMOD & 0xf0) | 0x02; TH0=-200; TL0=TH0; PX0=1; T0=1; 12. 13. 14. 15. 16. 17. } 18. void InitialLow( void ) 19. { 20. IE=0; IP=0; HighLow=0; TMOD = (TMOD & 0x0f) | 0x50; TH1=0; TL1=0; T1=1; ET1=1; Us100=0; Second=0; K64=0; oldK64=0; oldT1=0; TCON |= 0x50; EA = 1; //同时置 TR0=1; TR1=1; 同时置 21. TMOD = (TMOD & 0xf0) | 0x02; TH0=-200; TL0=TH0; ET0=1; TR0=1; 22. 23. 24. 25. 26. } 27. void T0intr( void ) interrupt 1 28. { if( HighLow==0 ) ++us100; 29. else 30. if( ++us100 >= 10000 ) 31. { unsigned int tmp1, tmp2; INT1 = 1; IT1=1; EX1=1; Us100=0; Second=0; K64=0; oldK64=0; oldT1=0; EA = 1; 32. TR1=0; tmp1=(TH1<<8) + (TL1); tmp2=K64; TR1=1; 33. fcy=((tmp2-oldK64)<<16) + (tmp1-oldT1); 34. oldK64=tmp1; oldT1=tmp2; 35. Second++; 36. us100=0; 37. } 38. } 39. void T1intr( void ) interrupt 3 { ++K64; } 40. void X1intr( void ) interrupt 2 41. { static unsigned char sts=0; 42. switch( sts ) 43. { 44. case 0: sts = 1; break; 45. case 1: oldT0=TL0; oldus=us100; sts=2; break; 46. case 2: 47. { 48. 49. 50. 51. 52. } 53. 54. 55. Sts = 0; break; } unsigned char tmp1, tmp2; TR0=0; tmp1=TL0; tmp2=us100; TR0=1; fcy = 1000000L/( (tmp2-oldus)*100L + (256-tmp1)/2 ); Second ++; 56. } 57. void main( void ) 58. { 59. if( HighLow==1) InitialHigh(); else InitialLow(); 60. 61. While(1) { 62. if( Second != 0 ) 63. { 64. Second = 0; 65. //display fcy 引用前面的数码管驱动程序, 引用前面的数码管驱动程序,注意下面对 T0 中断服务程序的修改 66. { unsigned char i; 67. 68. } 69. if( HighLow==1 ) 70. if( fcy1000L ){ InitalHigh();} for( i=0; i= 10000 ) 83. { unsigned int tmp1, tmp2; 84. TR1=0; tmp1=(TH1<<8) + (TL1); tmp2=K64; TR1=1; 85. fcy=((tmp2-oldK64)<= 10 ){ ms=0; DisplayBrush(); } //1ms 数码管刷新 第七节: 第七节:电子表 单键可调电子表:主要学习编程方法。 外部中断应用,中断嵌 解:电子表分为工作状态和调整状态。平时为工作状态,按键不足一秒,接键为换屏‘S’。按键超过一 秒移位则进入调整状态‘C’,而且调整光标在秒个位开始。调整状态时,按键不足一秒为光标移动‘M’, 超过一秒则为调整读数,每 0.5 秒加一‘A’,直到松键;如果 10 秒无按键则自动回到工作状态‘W’。 如果有年、月、日、时、分、秒。四联数码管可分三屏显示,显示格式为“年月.”、“日.时.”、“分.秒”, 从小数点的位置来区分显示内容。(月份的十位数也可以用“-”和“-1”表示)。 代码 1. 2. 3. enum status = { Work, Change, Add, Move, Screen } //状态牧举 //计时和调整都是对下面时间数组 Time 进行修改 unsigned char Time[12]={0,4, 0,6, 1,0, 0,8, 4,5, 3,2}; //04 年 06 月 10 日 08 时 45 分 32 秒 4. 5. 6. 7. unsigned char cursor = 12; //指向秒个位,=0 时无光标 unsigned char YmDhMs = 3; //指向“分秒”显示 ,=0 时无屏显 static unsigned char sts = Work; 如果 cursor 不为 0,装入 DisBuf 的对应数位,按 0.2 秒周期闪烁,即设一个 0.1 秒计数器 S01,S01 为奇数时灭,S01 为偶数时亮。 8. 9. 小数点显示与 YmDhMs 变量相关。 */ 10. void DisScan( void ) //动态刷新显示时调用。没编完,针对共阴数码管,只给出控控制算法 11. { 12. //DisBuf 每个显示数据的高四位为标志,最高位 D7 为负号,D6 为小数点,D5 为闪烁 13. unsigned char tmp; 14. 15. 16. 17. 18. 19. } 20. void Display( void ) 21. { 22. if( cursor != 0 ){ YmDhMs=(cursor+3)/4; } //1..4=1; 5..8=2; 9..12=3 //根据状态进行显示 tmp = Seg7Code[?x & 0x1f ]; //设?x 为显示数据,高 3 位为控制位,将低 5 位变为七段码 if( ?x & 0x40 ) tmp |= 0x80; //添加小数点 if( ?x & 0x20 ){ if( S01 & 0x01 ) tmp=0; } //闪烁,S01 奇数时不亮 //这里没有处理负号位 //将 tmp 送出显示,并控制对应数码管动作显示 23. for( i=(YmDhMs-1)*4; i ‘9’) Dat=‘0’; } 二、 在上题的基础上,改为 2400bps,循环发送小写字母‘a’到‘z’,然后是大写字母‘A’到‘Z’。 代码 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. #include void main( void ) { TMOD = (TMOD & 0x0F) | 0x20; TH1 = -96; //注意不用倍频方式 PCON &= 0x7F; //SMOD = 0 TR1 = 1; SCON = 0x42; while( 1 ) { if( TI==1 ) { static unsigned char Dat=‘a’; SBUF = Dat; TI = 0; //If( ++Dat > ‘9’) Dat=‘0’; ++Dat; if( Dat == (‘z’+1) ) if( Dat == (‘Z’+1) ) } } Dat=‘A’; Dat=‘a’; 22. } 上述改变值时,也可以再设一变量表示当前的大小写状态,比如写成如下方式: 代码 1. 2. 3. 4. ++Dat; { static unsigned char Caps=1; if( Caps != 0 ) 5. 6. 7. 8. } if( Dat>‘Z’){ Dat=‘a’; Caps=0; } else if( Dat>‘z’){ Dat=‘A’; Caps=1; } 如下写法有错误:因为小 b 比大 Z 的编码值大,所以 Dat 总是‘a’ 代码 1. 2. 3. ++Dat; if( Dat>‘Z’){ Dat=‘a’} else if( Dat>‘z’){ Dat=‘A’} 三、 有 A 和 B 两台单片机,晶体频率分别为 13MHz 和 14MHz,在容易编程的条件下,以最快的速度进 行双工串行通信,A 给 B 循环发送大写字母从‘A’到‘Z’,B 给 A 循环发送小写字母从‘a’到‘z’,双方都用 中断方式进行收发。 解:由于晶体频率不同,又不成 2 倍关系,所以只有通信方式 1 和方式 3,由于方式 3 的帧比方式 1 多一位,显然方式 3 的有效数据(9/11)比方式 1(8/10)高,但要用方式 3 的第 9 位 TB8 来发送数 据,编程难度较大,这里方式 1 较容易编程。 在计算最高速率时,由于单方程,双未知数,又不知道波特率为多少,所以要综合各方面的条件,估 算出 A 和 B 的分频常数,分别为-13 和-14 时,速率不但相同,且为最大值。如下给出 A 机的程序: 代码 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. #include void main( void ) { TMOD = (TMOD & 0x0F) | 0x20; TH1 = -13; //注意用倍频方式 PCON |= 0x80; //SMOD = 1 TR1 = 1; SCON = 0x52; //REN = 1 ES = 1; EA = 1; while( 1 ); 12. } 13. void RS232_intr( void ) interrupt 4 14. { 15. 16. 17. 18. 19. 20. unsigned char rDat; if( RI == 1 ){ RI=0; rDat=SBUF; } if( TI==1 ) { static unsigned char tDat=‘a’; SBUF = tDat; //注意 RI 和 TI 任一位变为 1 都中断 21. 22. 23. 24. } } TI = 0; If( ++Dat > ‘z’) Dat=‘a’; 四、 多机通位 在方式 2 和方式 3,SM2 只对接收有影 响,当 SM2=1 时,只接收第 9 位等于 1 的帧(伪地址帧), 而 SM2=0 时,第 9 位不影响接收。λ 多机通信中,地址的确认与本机程序有关,所以可以实现点对点、点对组、以及通播方式的通信。λ 如果收发共用一总线,任何时刻只有一个发送源能占用总线发送数据,否则发生冲突。由此可构造无 竞争的令牌网;或者多主竞争总线网。λ 1
Re:CCNA_CCNP 思科网络认证 PAT NAT 端口或地址转换 与端口映射======================# 本章课程大纲        公网地址和私网地址        NAT应用场景        静态NAT  :static  地址转换        动态NAT  :dynamic地址转换        PAT        :端口地址转换        端口映射 :port map        在Windows上同时实现的NAT和端口映射 # 私网地址三类 A类:10.0.0.0                                255.0.0.0(1网段) B类:172.16.0.0 -172.31.0.0         255.255.0.0(16网段) C类:192.168.0.0-192.168.255.0  255.255.255.0(255网段) # NAT 的使用场景        NAT的最初的目的是允许把私有IP地址映射到公网地址,以减缓IP地址空间的消耗。        当一个组织更换它的互联网服务提供商ISP,但不更改内网配置方案时,NAT同样很有用途。        以下是适于使用NAT的多种情况:         企业内网接入Internet节省公网地址         单向访问         大方向:内网访问互联网(互联网上主机不能够访问内网主机)         小方向:同单位实现两个网段之间单向访问(涉密部门能够访问其他部门,反之不可)         增加一个网段          避免在主干路由器增加到这个网段的路由         在Windows上实现的NAT和端口映射 # 网络地址转换的类型        下面介绍一下NAT的三种类型。         静态NAT 是为了在私网地址和公网地址间,允许一对一映射而设计的。         或者IPv4和IPv6之间的转换(典型)         不节省公网地址,故公网地址的利用效率不高,         无任何安全性,外网可以通过公网地址直接攻击内网主机,好像只增加路由器的工作         适用场景类似代理,可以较方便的更换主机,而无需修改路由器的配置         故应用不够广泛...         动态NAT 可以实现映射一个未注册 IP地址到注册IP地址池中的一个注册IP地址。         多对一,或多对多         比较PAT优势:避免被误认为攻击而被封ip地址         不太节省地址,应用不广泛         复用是最流行的NAT配置类型,也被称为端口地址映射(PAT)。         通过使用PAT,可实现上千个用户仅通过一个真实的全球 IP地址连接到Internet。         缺点:增加延迟,消耗路由器性能 # 端口映射(port mapping) 允许Internet上的计算机通过企业路由器的公网IP地址访问到内网的服务器------------------------------------------------         
第一章 前言 课题来源 当前流行的各大邮件客户端软件除了最主要的收发信件之外,功能越来越复杂,但是人 们平常真正用到的功能很少,很多功能尤其对于那些计算机知识相对缺乏的人来说,更 加显得太过于华丽而不太实用。有鉴于此,在了解RFC底层协议的基础上,本人开发了这 个各种功能相对简单实用的邮件客户端程序,简化了很多不必要的功能。 电子邮件介绍 电子邮件(简称E- mail)又称电子信箱、电子邮政,它是一种用电子手段提供信息交换的通信方式。它是 全球多种网络上使用最普遍的一项服务。这种非交互式的通信,加速了信息的交流及数 据传送,它是一个简易、快速的方法。通过连接全世界的Internet,实现各类信号的传 送、接收、存储等处理,将邮件送到世界的各个角落。到目前为止,可以说电子邮件是 Internet资源使用最多的一种服务,E- mail不只局限于信件的传递,还可用来传递文件、声音及图形、图像等不同类型的信息 。 电子邮件不是一种"终端到终端"的服务,是被称为"存储转发式"服务。这正是电子信箱 系统的核心,利用存储转发可进行非实用时通信,属异步通信方式。即信件发送者可随 时随地发送邮件,不要求接收者同时在场,即使对方现在不在,仍可将邮件读取信件, 不受时空限制。在这里,"发送"邮件意味着将邮件放到收件人的信箱中,而"接收"邮件 则意味着从自己的信箱中读取信件,信箱实际上是由文件管理系统支持是一个实体。因 为电子邮件是通过邮件服务器(mail server)来传递的。通常mail server 是执行多任 务操作系统UNIX的计算机,它提供24小时的电子邮件服务,用户只要向mail server管理 人员申请一个信箱账号,就可使用这项快递的邮件服务。 电子邮件的工作原理: 电子邮件的发送是通过电子邮件简单传速协议(Simple Mail Transfer Protocol,简称 SMTP)来完成的,电子邮件的接受是通过POP3协议来实现。它是Internet下的一种电子 邮件通信协议。 电子邮件的基本原理,是在通信网上设立"电子信箱系统",它实际上是一个计算机系 统。系统的硬件是一个高性能、大容量的计算机。硬盘作为信箱的存储介质,在硬盘上 为用户分一定的存储空间作为用户的"信箱",每位用户都有属于自己的一个电子信箱。 并确定一个用户和用户可以随意修改的口令。存储空间包含存放所收信件、编辑信件以 及信件存盘三部分空间,用户使用口令开启自己的信箱,并进行发信、读信、编辑、转 发、存档等各种操作。系统功能主要由软件实现。 开发环境及运行环境 1.4.1开发环境 AMD Athlom(TM), 512 内存,80G 硬盘 Microsoft(R)Windows XP Professional Micosoft Visual Studio 2003 (C Sharp) Micosoft Developer Network for Visual 2003 运行环境 Internet pentium 2及以上处理器,32M以上内存,4G以上硬盘 Micosoft windows 9X/NT操作系统 800*600或以上的屏幕分辨率 确保机器上安装有.Net FrameWork 或者以上版本 第二章 系统需求分析 系统功能需求分析 电子邮件系统需求实现的功能包括新建用户的帐号,接受简单邮件或带附件的邮件,发 送简单邮件或发送带附件的邮件,电子邮件编号,电子邮件分类管理,通信薄管理。为 了使用通信薄,于是添加了对用户资料的增加,修改,取消操作。 2.1.1软件的总体架构 图 1 软件构架图 2.1.2 系统功能 图2 系统功能图 2.1.3系统总体用例图 图3 系统总体用例图 数据库需求分析 在对系统进行系统需求分析的基础上,可以得到系统在处理数据时会用到下面所示的 数据项和数据结构: 1)用户信息:帐号名称,用户名,密码,电子邮箱地址,SMTP服务器,SMTP端口号,P OP3服务器,POP3端口号。 2)通信薄信息:姓名,邮箱地址,电话号码,QQ号,手机号码,通信地址。 第三章 系统设计 系统的流程设计 邮件客户端最重要的两个功能就是接收邮件和发送邮件,其中接收邮件的流程图如图 4所示。从流程图中可以看出,接收邮件时首先要创建一个TCP连接到POP3服务器。如果 连接不成功就退出执行,连接成功后再发送USER和PASS命令进行身份验证,身份验证通 过后再通过STAT命令获得要接收的邮件数,当邮件数大于0时,通过RETR命令逐个接收邮 件。接收邮件完毕后,检查帐号中是否保留服务器上的邮件设置,如果是就不作任何操 作,否则从服务器上删除已经接受的邮件。最后关闭连接。完成邮件接收。 图4 接收邮件流程图 发送邮件的流程图,先检查"发信箱"目录中是否有待发邮

6,185

社区成员

发帖
与我相关
我的任务
社区描述
windows网络管理与配置
社区管理员
  • 网络管理与配置社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧