返回列表 发帖

【教学视频】《C语言也能干大事》第十三节:Socket网络开发2

【秘籍:免费获得大量鹏币】|【立即购买鹏币(仅需5 元)】
帖子只需购买一次即可以永久使用,不需要每次访问的时候都购买。购买后将会看到如下的视频、资料等下载地址
本主题需向作者支付 50 鹏币 才能浏览 购买主题 已购买人数:469  记录

未购买此贴可以在线观看在线FLV格式的视频:
http://player.youku.com/player.php/sid/XNzY2NDM3ODA=/v.swf

购买此贴后可以得到清晰版的下载地址和随课程源码。


Socket网络开发2


这节课是对上节课内容的复习和实战,并且融合了C语言中指针、函数、类型转换、结构体等知识。
一、复习:
复述QQ的基本原理;在一个典型的网络程序中分为哪两端?
IP地址、域名、DNS、端口是做什么用的?
演示一个简单的和网易Email服务器对话的过程。
SocketWindows特有的吗?什么是WinSock
WinSockSocket标准的区别和联系。
Windows中函数的错误信息是通过什么来报告的?
创建客户端到服务器端的Socket连接的时候需要指定服务器端的端口吗?为什么?需要指定客户端的端口吗?为什么?客户端不用显式指定端口,但并不是说不需要端口,而是这个端口是由操作系统分配的。
有一个端口能同时被多个程序占用吗?
发送、接收数据各用什么函数?

二、开发网络定时器


1、看看Windows的网络授时功能(客户端)


2、网络授时原理


客户端连接到授时服务器上,授时服务器会马上将当前时间发送给客户端,原理很简单。


网络授时分为好几种协议,比如返回的是日期字符串,有的返回的是自190011日至今的秒数。“2009-03-08 22:13:58”、39393933993


扩展阅读:http://zhidao.baidu.com/question/20121991.html


2、
国家授时中心提供的网络授时返回的是自190011日至今的秒数。


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-FreeVC没有任何差别!!!!!!!!!!!!


小技巧:在命令提示符下不能CtrlCCtrlV,但是选中后点右键就是复制、粘贴


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);


把它封装成函数,怎么设计接口?深刻理解指针以及WindowsLP的惯例。


把时间打印出来,怎么打印??????


怎么时间不对


设置系统时间



//SetSystemTime(&st);




作业:定时的进行网络对视。SetTimer函数,1分钟对时一次。时钟。



Over

如鹏网(www.RuPeng.com ),大学生计算机学习社区
学在如鹏网,在校不迷茫,毕业即辉煌!

购买主题 已购买人数:469  记录

修改系统时间
用SetSystemTime()的话需要使用修正前的时间,它会自动加8小时的...
SetLocalTime()可以使用修正后的时间
附件: 您需要登录才可以下载或查看附件。没有帐号?注册
1

评分人数

TOP

根据老师的代码,在vs2005上编译出错,dwTime未定义,可能我看不清老师视频里面的东西,改成ulTime就对了。
1

评分人数

TOP

有新课了,支持哦!

TOP

期待的课程,快速跟进

TOP

支持,支持。。
念念·相思·相念·相思

TOP

支持,支持。。
念念·相思·相念·相思

TOP

原来是收费的啊!

TOP

强烈支持哦,其实五元钱一节课算是便宜的了,如果我们是去给钱听名师讲课的好,起嘛也是好几十几百一节嘛,杨老师真伟大,肯为大家无偿付出这么多时间,真不容易呀。如果没有鹏币的话直接付钱好了,我感觉购买鹏币的方式好麻烦,直接用手机支付我感觉是最方便的了。我也真希望出五元钱看个清晰版。哈哈!

TOP

不清晰版的,我只能当广播听了。
念念·相思·相念·相思

TOP

金币还是不够哦.....

TOP

我的作业

服务器总是连不上,不知为什么,大家替我看看
附件: 您需要登录才可以下载或查看附件。没有帐号?注册

TOP

感谢辛勤付出

TOP

原帖由 PrettyPrince 于 2009-3-15 15:23 发表
服务器总是连不上,不知为什么,大家替我看看


你ping一下那个ip看能不能ping通,如果ping的通就说明是程序问题,如果ping不通的话就换其他的服务器试试。

TOP

在网上查了的好多服务器都ping不通,应该是网络问题了

TOP

能ping通,但是就是连接不了!郁闷!但是就是连接不成功!
附件: 您需要登录才可以下载或查看附件。没有帐号?注册

TOP

对就是这样,我的也是,但我ping的时候也ping不通
【Do More,Say Less】

TOP

哈哈,还是清晰版好,先买下了~

TOP

原帖由 无风听海 于 2009-3-16 16:29 发表
能ping通,但是就是连接不了!郁闷!但是就是连接不成功!497


你在命令行下执行“telnet 192.43.244.18 13”,然后看会不会出现下面的画面:

这是在通过windows内置的telnet客户端连接授时服务器的13授时端口,如果出现这个画面的话就说明网络没问题,是你的程序写错了,否则就是网络问题。
附件: 您需要登录才可以下载或查看附件。没有帐号?注册

TOP

我所在的用户组没有权限看这个页面的附件!请老大更正!

TOP

原帖由 无风听海 于 2009-3-21 21:31 发表
我所在的用户组没有权限看这个页面的附件!请老大更正!


在这个帖子里的附件属于支付鹏币以后才能看的内容。

TOP

一点小小的遗漏

在st.wHour加8的时候,如果大于24的时候就应当对它取余,在st.wDay上加1!

TOP

下来看了哈...
未来的世界:方向比努力重要,能力比知识重要,健康比成绩重要,生活比文凭重要,情商比智商重要!

TOP

我的也有这个错误:



而且在命令行下执行“telnet 192.43.244.18 13”,如图:


这个是不是网络问题呀???
附件: 您需要登录才可以下载或查看附件。没有帐号?注册
未来的世界:方向比努力重要,能力比知识重要,健康比成绩重要,生活比文凭重要,情商比智商重要!

TOP

原帖由 peilw625311 于 2009-3-23 00:13 发表
在st.wHour加8的时候,如果大于24的时候就应当对它取余,在st.wDay上加1!

还需要判断st.wDayOfWeek,st.wMonth,st.wYear

TOP

原帖由 jlsnake 于 2009-7-2 03:02 发表
修改系统时间
用SetSystemTime()的话需要使用修正前的时间,它会自动加8小时的...
SetLocalTime()可以使用修正后的时间
1644



哈哈,仙羽果然是高手。。。牛的,像你学习啦~我还想复杂了!!可惜我看不到你的附件~
SYSTEMTIME st;

/* LASTINPUTINFO lastTime;
lastTime.cbSize = sizeof(LASTINPUTINFO);
lastTime.dwTime = ulTime;*/

UINT64 uiCurTime, uiBaseTime, uiResult;
uiBaseTime = ((UINT64) HIGHTIME << 32) + LOWTIME;
uiCurTime = (UINT64)ulTime * (UINT64)10000000;
uiResult = uiBaseTime + uiCurTime;
FileTimeToSystemTime((LPFILETIME)&uiResult, &st);

::SetSystemTime(&st);
::GetLocalTime(&st);

wsprintf(buf,TEXT("%ld年%ld月%ld日 %ld时%ld分%ld秒"),st.wYear,st.wMonth,
    st.wDay,st.wHour,st.wMinute,st.wSecond);
MessageBox(buf);

TOP

新手来听讲课

感觉老师讲的太好了,虽然是个不清晰版,但是跟着走下来,程序也弄出来了,哈哈,莫办法喽,俺家穷,花不起钱,不过老师都把大部分代码贴出来,让我们这些穷孩子也能跟着学了,太感谢了,如鹏网,永远支持你

TOP

第十三课不能下载请

第十三课不能下载请 版主 修复一下  谢谢!

TOP

原帖由 sxcwz 于 2009-9-17 00:35 发表
第十三课不能下载请 版主 修复一下  谢谢!


我这可以下载的,估计是你网络问题吧,你再试试

TOP

原帖由 jlsnake 于 2009-7-2 01:28 发表

还需要判断st.wDayOfWeek,st.wMonth,st.wYear


这就比较麻烦了,hour到底了影响day,day到底了影响月,月到底了影响年,
还有各个月又不统一,

TOP

返回列表