- 1、本文档共5页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
《C语言也能干大事》第十一节
《C语言也能干大事》第十一节:Socket网络编程板书:这节课是自己动手写QQ、自己动手写飞鸽传书的基础,以后想从事网络开发、信息系统开发、游戏开发、嵌入式系统开发等的同学必须学习。演示一个简单的和网易Email服务器对话的过程。1、网络基本概念讲解QQ的基本原理讲解浏览器上网的基本原理服务器:Server。提供服务的计算机。客户端:Client。和服务器端交互的一个设备。IP地址:计算机在网络中的地址。相当于每个家庭的电话。别名、域名:www.RuP。域名就相当于你家的地址。问114,你家的电话(告诉地址)DNS:网络中的114。Domain Name System。端口:Port。不同的程序连接服务器时候用的插座。(程序和服务器通信的时候的一个开得的一个口子)Socket(套接字):导线、网络连接。2、WinSock、WinSocket。Socket:平台无关的。Socket标准。所有操作系统都实现了这个标准。Send、recv。。。标准的。一通百通!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!WinSock:添加了一些Windows独有的函数。而且不用这些函数的话Socket程序还跑不起来。羞臊微软!!!WinSock编程:平台无关,一通百通。WSA(Windows Socket API)SS3、LastError调用WindowsAPI的时候,每步执行完毕都会把执行结果放到LastError中去,所以应该在函数执行完毕立即去取。DeleteFile(f1)DeleteFile(f2)GetLastError()LastError只能容纳一个错误码DeleteFile(f1)GetLastError()DeleteFile(f2)GetLastError()错误码。2233、344555FormatMessage:把错误码转换为错误消息。Windows错误处理GetLastError
void ShowError()
{
TCHAR* lpMsgBuf;
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER| //自动分配消息缓冲区
FORMAT_MESSAGE_FROM_SYSTEM, //从系统获取信息
NULL,GetLastError(), //获取错误信息标识
MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT),//使用系统缺省语言
(LPTSTR)lpMsgBuf, //消息缓冲区
0,
NULL);
MessageBox(NULL,lpMsgBuf,,MB_ICONERROR);
}
复制代码
在.h中声明函数,在.c中实现!!!都会有哪些错误?4、模板代码:(1)、添加winsock2.h(2)、连接库“wsock32”。怎么知道添加它呢?#pragma comment(lib,ws2_32.lib)。
注意:在mainDlg.h里面添加void SocketTest();
void ShowError();(3)、模板代码
WSADATA wsaData;
//初始化Socket库
WSAStartup(MAKEWORD(2,0),wsaData);
//创建一根电线
SOCKET sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
SOCKADDR_IN sa;
sa.sin_family=AF_INET;
//设置电线连接服务器端的端口
sa.sin_port = htons(IPPORT_SMTP);
//35是ping 出来的,后面会讲使用gethostbyname来直接从
//主机名得到ip地址
sa.sin_addr.S_un.S_addr = inet_addr(35);
//为什么不用设置客户端的端口,难道不需要客户端的端口吗?
if(connect(sock,(SOCKADDR *)sa,sizeof(sa))==SOCKET_ERROR)
{
ShowError();
return;
}
//做事情。把大象放冰箱总共分几步
closesocket(sock);
WSACleanup();
复制代码
QQ服务器的端口8888。需要指定客户端的端口是9999.端口有一个特点:排他性!端口已经被别的程序占用,不能再用这个端口。开两个QQ。1111111111122222222222 9999。如果端口可以被多个程序使用的话,QQ聊天服务器发过来的消息被多个QQ收到。很荒谬! 排他性!如果在程序里写死了客户端用的端口。。。所以才需要Socket替客户端动态分配一
文档评论(0)