设为首页收藏本站

如鹏网

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 117951|回复: 570

【教学视频】《C语言也能干大事》第十一节:Socket网络编程

[复制链接]

184

主题

0

好友

1万

积分

超级版主

Rank: 8Rank: 8

发表于 2009-3-1 13:22:55 |显示全部楼层
未购买此贴可以在线观看不清晰版的视频格式:

http://player.youku.com/player.php/sid/XNzQ5NzQ3MDQ=/v.swf
购买此贴后可以得到清晰版的下载地址


板书:
这节课是自己动手写QQ、自己动手写飞鸽传书的基础,以后想从事网络开发、信息系统开发、游戏开发、嵌入式系统开发等的同学必须学习。
演示一个简单的和网易Email服务器对话的过程。
1、网络基本概念
讲解QQ的基本原理
讲解浏览器上网的基本原理
服务器:Server。提供服务的计算机。
客户端:Client。和服务器端交互的一个设备。
IP地址:计算机在网络中的地址。相当于每个家庭的电话。211.97.1.2
别名、域名:www.RuPeng.com。域名就相当于你家的地址。问114,你家的电话(告诉地址)
DNS:网络中的114Domain Name System
端口:Port。不同的程序连接服务器时候用的插座。(程序和服务器通信的时候的一个开得的一个口子)
Socket(套接字):导线、网络连接。

2
WinSockWinSocket
Socket:平台无关的。Socket标准。所有操作系统都实现了这个标准。Sendrecv。。。标准的。一通百通!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
WinSock:添加了一些Windows独有的函数。而且不用这些函数的话Socket程序还跑不起来。羞臊微软!!!
WinSock编程:平台无关,一通百通。WSA(Windows Socket API)
Sz1.tencent.com
Sz2.tencent.com
3
LastError
调用WindowsAPI的时候,每步执行完毕都会把执行结果放到LastError中去,所以应该在函数执行完毕立即去取。
DeleteFile(f1)
DeleteFile(f2)
GetLastError()
LastError只能容纳一个错误码
DeleteFile(f1)
GetLastError()
DeleteFile(f2)
GetLastError()

错误码。2233344555

FormatMessage:把错误码转换为错误消息。

Windows错误处理
GetLastError
  1. void ShowError()
  2. {
  3. TCHAR* lpMsgBuf;
  4. FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER| //自动分配消息缓冲区
  5. FORMAT_MESSAGE_FROM_SYSTEM, //从系统获取信息
  6. NULL,GetLastError(), //获取错误信息标识
  7. MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT),//使用系统缺省语言
  8. (LPTSTR)&lpMsgBuf, //消息缓冲区
  9. 0,
  10. NULL);
  11. MessageBox(NULL,lpMsgBuf,"",MB_ICONERROR);
  12. }
复制代码
.h中声明函数,在.c中实现!!!

都会有哪些错误?
4、模板代码:
1)、添加winsock2.h
2)、连接库“wsock32”。怎么知道添加它呢?
(3)、模板代码
  1. WSADATA wsaData;
  2. //初始化Socket库
  3. WSAStartup(MAKEWORD(2,0),&wsaData);
  4. //创建一根电线
  5. SOCKET sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
  6. SOCKADDR_IN sa;
  7. sa.sin_family=AF_INET;
  8. //设置电线连接服务器端的端口
  9. sa.sin_port = htons(IPPORT_SMTP);
  10. //123.125.50.135是ping smtp.163.com出来的,后面会讲使用gethostbyname来直接从
  11. //主机名得到ip地址
  12. sa.sin_addr.S_un.S_addr = inet_addr("123.125.50.135");
  13. //为什么不用设置客户端的端口,难道不需要客户端的端口吗?
  14. if(connect(sock,(SOCKADDR *)&sa,sizeof(sa))==SOCKET_ERROR)
  15. {
  16. ShowError();
  17. return;
  18. }
  19. //做事情。把大象放冰箱总共分几步
  20. closesocket(sock);
  21. WSACleanup();
复制代码
QQ服务器的端口8888。需要指定客户端的端口是9999.
端口有一个特点:排他性!端口已经被别的程序占用,不能再用这个端口。
开两个QQ11111111111
22222222222 9999
。如果端口可以被多个程序使用的话,QQ聊天服务器发过来的消息被多个QQ收到。很荒谬! 排他性!
如果在程序里写死了客户端用的端口。。。所以才需要Socket替客户端动态分配一个端口。所以不需要在程序中显示指定客户端的端口号!
客户端向服务器端发消息:send
服务器端想客户端发消息,客户端这边应该接收,recv。(receive

SMTP服务器,你连上来以后服务器端主动向你发一条消息
recv(sock,buffer,256,0);
第一个是使用的socket,“导线”,套接字
接收数据的缓冲区的指针
接收数据的缓冲区的大小
0

send(sock,cQuit,lstrlen(cQuit),0);

第一个是使用的socket,“导线”,套接字
接收数据的缓冲区的指针
接收数据的缓冲区的大小
0
  1. (4)一上来人家就主动和你唠嗑:
  2. char buffer[256];
  3. ZeroMemory(buffer,sizeof(buffer)/sizeof(char));
  4. //接收问候语
  5. recv(sock,buffer,256,0);
  6. MessageBox(hwnd,buffer,"",0);
  7. (5)朋友再见
  8. //注意不能忘了末尾的回车
  9. TCHAR cQuit[] = "QUIT\n";
  10. send(sock,cQuit,lstrlen(cQuit),0);

  11. ZeroMemory(buffer,sizeof(buffer)/sizeof(char));
  12. //接收GoodBye
  13. recv(sock,buffer,256,0);
  14. MessageBox(hwnd,buffer,"",0);
复制代码

购买主题 已有 925 人购买  本主题需向作者支付 30 鹏币 才能浏览

0

主题

0

好友

6221

积分

论坛元老

Rank: 8Rank: 8

发表于 2009-3-1 13:28:08 |显示全部楼层
看一次50鹏币啊??貌似有点多了吧~~~

184

主题

0

好友

1万

积分

超级版主

Rank: 8Rank: 8

发表于 2009-3-1 13:28:38 |显示全部楼层
有问题同学们请反应,贴的有点仓促,肚子快饿死了,先去吃饭,闪ing....

0

主题

0

好友

950

积分

高级会员

Rank: 4

发表于 2009-3-1 13:38:59 |显示全部楼层
鹏币50太多了吧?用积分多好啊,,,,,

0

主题

0

好友

950

积分

高级会员

Rank: 4

发表于 2009-3-1 13:42:00 |显示全部楼层
我们论坛鹏币过50的也才15人。。。。

0

主题

0

好友

6221

积分

论坛元老

Rank: 8Rank: 8

发表于 2009-3-1 13:47:33 |显示全部楼层
就是,50鹏币太多了·~~

0

主题

0

好友

84

积分

注册会员

Rank: 2

发表于 2009-3-1 13:47:35 |显示全部楼层

0

主题

0

好友

576

积分

高级会员

Rank: 4

发表于 2009-3-1 14:03:48 |显示全部楼层
这样的话新手就全部被扼杀了。。。。

0

主题

0

好友

1227

积分

金牌会员

Rank: 6Rank: 6

发表于 2009-3-1 14:13:02 |显示全部楼层
我投降了!!我要买鹏币……哪里买……

0

主题

0

好友

4995

积分

论坛元老

Rank: 8Rank: 8

如鹏终身MVP勋章

发表于 2009-3-1 14:26:19 |显示全部楼层
老大,鹏币的价格怎样呢?什么方式支付?

11

主题

0

好友

1848

积分

金牌会员

Rank: 6Rank: 6

发表于 2009-3-1 14:33:19 |显示全部楼层
怎么这么贵呢?。。。汗。。

0

主题

0

好友

950

积分

高级会员

Rank: 4

发表于 2009-3-1 14:40:33 |显示全部楼层
大家抓紧做贡献,贡献可以转化为鹏币。。。。。
然后控制面板里面的积分交易把贡献换成鹏币。。。
我换好。。以后要多回答问题了。。。。

27

主题

0

好友

4万

积分

超级版主

值班超版

Rank: 8Rank: 8

优秀版主勋章 三等功勋章 优秀建议勋章

发表于 2009-3-1 15:42:05 |显示全部楼层
50鹏币?这玩意刚出来没多久么!

1

主题

0

好友

1489

积分

金牌会员

什么什么的?

Rank: 6Rank: 6

优秀建议勋章

发表于 2009-3-1 15:51:29 |显示全部楼层
50的价格貌似有点恐怖,毕竟现在网站才起来没多久么。呵呵
念念·相思·相念·相思

0

主题

0

好友

349

积分

中级会员

Rank: 3Rank: 3

发表于 2009-3-1 15:51:44 |显示全部楼层
老大,太贵了吧!受经济危机的迫害都成穷娃啦!降一下吧!或者用积分吧!

2

主题

0

好友

7685

积分

超级版主

"活"神仙

Rank: 8Rank: 8

如鹏MVP提名勋章 如鹏QQ群总管奖章

发表于 2009-3-1 15:57:24 |显示全部楼层
等 java 干大事出来之后再来消费鹏币..
我不是一个聪明的人,往往要花别人两倍的时间去看懂一些内容,信念告诉我要坚持.cand_tyliang,加油!

27

主题

0

好友

4万

积分

超级版主

值班超版

Rank: 8Rank: 8

优秀版主勋章 三等功勋章 优秀建议勋章

发表于 2009-3-1 16:03:07 |显示全部楼层
原帖由 zhaoyinghui0428 于 2009-3-1 15:51 发表
老大,太贵了吧!受经济危机的迫害都成穷娃啦!降一下吧!或者用积分吧!

积分可以转换的!http://www.rupeng.com/forum/viewthread.php?tid=1075&pid=5897&page=1&extra=page%3D1

0

主题

0

好友

1393

积分

版主

Rank: 7Rank: 7Rank: 7

三等功勋章

发表于 2009-3-1 16:23:10 |显示全部楼层
老大,貌似50鹏币确实有点贵哦!呵呵!大家反应都好强烈!

0

主题

0

好友

6221

积分

论坛元老

Rank: 8Rank: 8

发表于 2009-3-1 16:28:47 |显示全部楼层
原帖由 kider 于 2009-3-1 16:03 发表

积分可以转换的!http://www.rupeng.com/forum/viewthread.php?tid=1075&pid=5897&page=1&extra=page%3D1



好像是只有贡献可以转换吧??

184

主题

0

好友

1万

积分

超级版主

Rank: 8Rank: 8

发表于 2009-3-1 17:11:18 |显示全部楼层
新东西出来肯定都会有抵触的,50鹏币并不高,我曾想到过上百鹏币,但是发现有很多同学鹏币(即原先的威望积分)并不高,所以调低到了50。注意KIDER已经提醒大家了,以前的贡献积分是可以一比一转换为鹏币的。论坛已经有好几位同学的鹏币已经几百甚至上千了。要知道录制这么一个课程需要多少心血。只有通过这种方式激励大家才能更激励的推广如鹏,我也能把更多的精力投入到课程研发中。工作、如鹏网的事情、兼职讲课…已经一个多月没好好休息了,今天下午终于可以找个幽静的小公园静一静,腰酸背痛…。希望我以后在如鹏网的的工作方式是:备课、录课程、解答没人解答的疑难问题、休息好好的休息。把如鹏网变成大家共管的一个学习社区,我以及其他老师只上课的老师,如鹏网则是大家自己的教室。获得鹏币也跟简单:一个精品贴10鹏币、一个推广访问2鹏币、一个推广注册5鹏币、很好的回答别人的问题也可能会得到版主颁发的鹏币,那么50个鹏币还难吗?只要发五个精华帖或者二十五个人访问如鹏或者10个人注册如鹏…我可以做到为同学们录课程到凌晨、周末不休、推掉讲课邀请,相信同学们赚这些鹏币也不会难。至于有同学说的积分制度把新手挡在门外的情况也不存在,因为如鹏的所有课程都是一开始若干节不需要鹏币的,比如《C语言也能干大事》的千十节,相信不等学完了这十节课你赚的积分已经足够用来兑换后面的课程了。希望咱们一起来建设如鹏网,“在校不迷茫,毕业即辉煌!”

2

主题

0

好友

7685

积分

超级版主

"活"神仙

Rank: 8Rank: 8

如鹏MVP提名勋章 如鹏QQ群总管奖章

发表于 2009-3-1 17:12:39 |显示全部楼层
个人感觉,下不下在高清不是重要的了,老大不是说了,原来在新浪UC 学习,就那么一个小窗口下显示,不是有很多同学学习的很好.
我不是一个聪明的人,往往要花别人两倍的时间去看懂一些内容,信念告诉我要坚持.cand_tyliang,加油!

0

主题

0

好友

4995

积分

论坛元老

Rank: 8Rank: 8

如鹏终身MVP勋章

发表于 2009-3-1 17:58:11 |显示全部楼层
虽然觉得50鹏币有点贵,不过老大讲得也很有道理~为了这些课程老大这样也挺辛苦挺累的,我们应该支持~
这样一来也可以提高我们的积极性啊~

0

主题

0

好友

963

积分

高级会员

Rank: 4

发表于 2009-3-1 18:38:35 |显示全部楼层
转完积分有200多了,可以看喽,我都是帮着宣传赚来的啊

8

主题

0

好友

4723

积分

论坛元老

Rank: 8Rank: 8

发表于 2009-3-1 18:47:47 |显示全部楼层

8

主题

0

好友

4723

积分

论坛元老

Rank: 8Rank: 8

发表于 2009-3-1 18:58:04 |显示全部楼层

0

主题

0

好友

334

积分

中级会员

Rank: 3Rank: 3

三等功勋章

发表于 2009-3-1 19:41:04 |显示全部楼层

184

主题

0

好友

1万

积分

超级版主

Rank: 8Rank: 8

发表于 2009-3-1 19:42:00 |显示全部楼层
大家不用等着“泄露版”出现了,下载地址会定期换的,泄露了也没用,我累死累活为了谁呀,图什么呀,千万必要以为“买”这个视频我赚了多少,我去外边讲课一小时就几百块钱!!!这又不是真的钱,靠推广如鹏、发精品贴、原创帖完全可以轻松的获得鹏币!

8

主题

0

好友

2965

积分

金牌会员

努力奋斗中...

Rank: 6Rank: 6

发表于 2009-3-1 19:54:26 |显示全部楼层
老大辛苦了,顶一个。

0

主题

0

好友

121

积分

注册会员

Rank: 2

发表于 2009-3-1 20:01:50 |显示全部楼层
理解理解,虽然我现在币还不够
勤学如春起之苗,不见其增,日有所长;
辍学如磨刀之石,不见其损,日有所亏

3

主题

0

好友

1283

积分

金牌会员

Rank: 6Rank: 6

发表于 2009-3-1 20:25:33 |显示全部楼层
绝对理解,我们努力赚50鹏币可比不了老师用心作视频的坚信。
您需要登录后才可以回帖 登录 | 注册

手机版|Archiver|如鹏网 ( 粤ICP备09013919号 )   360网站安全检测平台

GMT+8, 2012-5-19 15:32

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部