板书13:Socket网络开发2
这节课是对上节课内容的复习和实战,并且融合了C语言中指针、函数、类型转换、结构体等知识。
一、复习:
复述QQ的基本原理;在一个典型的网络程序中分为哪两端?
IP地址、域名、DNS、端口是做什么用的?
演示一个简单的和网易Email服务器对话的过程。
Socket是Windows特有的吗?什么是WinSock?
WinSock和Socket标准的区别和联系。
Windows中函数的错误信息是通过什么来报告的?
创建客户端到服务器端的Socket连接的时候需要指定服务器端的端口吗?为什么?需要指定客户端的端口吗?为什么?客户端不用显式指定端口,但并不是说不需要端口,而是这个端口是由操作系统分配的。
有一个端口能同时被多个程序占用吗?
发送、接收数据各用什么函数?
二、开发网络定时器 1、看看Windows的网络授时功能(客户端) 2、网络授时原理 客户端连接到授时服务器上,授时服务器会马上将当前时间发送给客户端,原理很简单。 网络授时分为好几种协议,比如返回的是日期字符串,有的返回的是自1900年1月1日至今的秒数。“2009-03-0822:13:58”、39393933993 扩展阅读:http://zhidao.baidu.com/question/20121991.html 国家授时中心提供的网络授时返回的是自1900年1月1日至今的秒数。 3、先移植第一节课的代码 可供选择的授时服务器(不止这些): www.time.ac.cn国家授时中心 Clock.sgi.comSGI Tick.mit.edu 麻省理工学院 Time.nist.gov
NIST 几句话: Compile:编译 Link:连接 编译是单一的文件编译成.o、.obj文件,然后Link是.obj连接成.exe Link库!!!! 一通百通的力量!!!!!!!!!!!!!! C-Free、VC没有任何差别!!!!!!!!!!!! 小技巧:在命令提示符下不能CtrlC、CtrlV,但是选中后点右键就是复制、粘贴 4、授时服务器是37端口IPPORT_TIMESERVER。返回的是什么? unsigned long ulTime; recv(sock,(char *)&ulTime,sizeof(unsigned long),0); 深刻理解这段代码的含义 ulTime = ntohl(ulTime); 从网络字节顺序转换为主机字节顺序。这个是重点,很多公司面试的时候都会问这个,以后工作中也会遇到。 什么是网络字节顺序、什么是主机字节顺序。 不同的CPU中处理整数的方式不一样,有的是低位在前、有的是高位在前。计算机组成原理、数字电路。。。 网络字节顺序则是统一标准。 如果直接接收的话就会造成接受者接收的数据正好是相反的。 扩展阅读:http://hi.baidu.com/cdmember_daihw/blog/item/ad83090f1fb4ffebab6457e6.html 中国是东8区。猜的:时间服务器返回的是格林尼治时间。
Windows中时间用SYSTEMTIME结构体表示时间,怎么将ulTime转换为SYSTEMTIME?网上找到下面的代码: - #define HIGHTIME
- 21968699 // 21968708 // Jan 1, 1900 FILETIME.highTime
- #define LOWTIME
- 4259332096 // 1604626432 // Jan 1, 1900 FILETIME.lowtime
- SYSTEMTIME st;
- UINT64 uiCurTime, uiBaseTime, uiResult;
- uiBaseTime = ((UINT64) HIGHTIME << 32) + LOWTIME;
- uiCurTime = (UINT64)dwTime * (UINT64)10000000;
- uiResult = uiBaseTime + uiCurTime;
- FileTimeToSystemTime((LPFILETIME)&uiResult, &st);
复制代码 把它封装成函数,怎么设计接口?深刻理解指针以及Windows中LP的惯例。 把时间打印出来,怎么打印?????? 怎么时间不对 设置系统时间 //SetSystemTime(&st); 作业:定时的进行网络对视。SetTimer函数,1分钟对时一次。时钟。
|