未购买此贴可以在线观看在线FLV格式的视频:
http://player.youku.com/player.php/sid/XNzY2NDM3ODA=/v.swf
购买此贴后可以得到清晰版的下载地址和随课程源码。
Socket网络开发2
这节课是对上节课内容的复习和实战,并且融合了C语言中指针、函数、类型转换、结构体等知识。
一、复习:
复述QQ的基本原理;在一个典型的网络程序中分为哪两端?
IP地址、域名、DNS、端口是做什么用的?
演示一个简单的和网易Email服务器对话的过程。
Socket是Windows特有的吗?什么是WinSock?
WinSock和Socket标准的区别和联系。
Windows中函数的错误信息是通过什么来报告的?
创建客户端到服务器端的Socket连接的时候需要指定服务器端的端口吗?为什么?需要指定客户端的端口吗?为什么?客户端不用显式指定端口,但并不是说不需要端口,而是这个端口是由操作系统分配的。
有一个端口能同时被多个程序占用吗?
发送、接收数据各用什么函数?
二、开发网络定时器
1、看看Windows的网络授时功能(客户端)
2、网络授时原理
客户端连接到授时服务器上,授时服务器会马上将当前时间发送给客户端,原理很简单。
网络授时分为好几种协议,比如返回的是日期字符串,有的返回的是自1900年1月1日至今的秒数。“2009-03-08 22:13:58”、39393933993
扩展阅读:http://zhidao.baidu.com/question/20121991.html
2、
国家授时中心提供的网络授时返回的是自1900年1月1日至今的秒数。
3、
先移植第一节课的代码
可供选择的授时服务器(不止这些):
www.time.ac.cn
国家授时中心
Clock.sgi.com
SGI
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分钟对时一次。时钟。
Over!
如鹏网(www.RuPeng.com ),大学生计算机学习社区
学在如鹏网,在校不迷茫,毕业即辉煌!