C语言也能干大事十一节(如鹏基础)

来源:互联网 发布:办公软件word2007 编辑:程序博客网 时间:2024/06/04 22:47

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

void ShowError()

{

TCHAR* lpMsgBuf;

FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER| //自动分配消息缓冲区

FORMAT_MESSAGE_FROM_SYSTEM, //从系统获取信息

NULL,GetLastError(), //获取错误信息标识

MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT),//使用系统缺省语言

(LPTSTR)&lpMsgBuf, //消息缓冲区

0,

10 NULL);

11 MessageBox(NULL,lpMsgBuf,"",MB_ICONERROR);

12 }


.h中声明函数,在.c中实现!!!

都会有哪些错误?
4、模板代码:
1)、添加winsock2.h
2)、连接库“wsock32”。怎么知道添加它呢?
(3)、模板代码

13 WSADATA wsaData;

14 //初始化Socket库

15 WSAStartup(MAKEWORD(2,0),&wsaData);

16 //创建一根电线

17 SOCKET sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);

18 SOCKADDR_IN sa;

19 sa.sin_family=AF_INET;

20 //设置电线连接服务器端的端口

21 sa.sin_port = htons(IPPORT_SMTP);

22 //123.125.50.135是ping smtp.163.com出来的,后面会讲使用gethostbyname来直接从

23 //主机名得到ip地址

24 sa.sin_addr.S_un.S_addr = inet_addr("123.125.50.135");

25 //为什么不用设置客户端的端口,难道不需要客户端的端口吗?

26 if(connect(sock,(SOCKADDR *)&sa,sizeof(sa))==SOCKET_ERROR)

27 {

28 ShowError();

29 return;

30 }

31 //做事情。把大象放冰箱总共分几步

32 closesocket(sock);

33 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

34 (4)一上来人家就主动和你唠嗑:

35 char buffer[256];

36 ZeroMemory(buffer,sizeof(buffer)/sizeof(char));

37 //接收问候语

38 recv(sock,buffer,256,0);

39 MessageBox(hwnd,buffer,"",0);

40 (5)朋友再见

41 //注意不能忘了末尾的回车

42 TCHAR cQuit[] = "QUIT\n";

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

44 

45 ZeroMemory(buffer,sizeof(buffer)/sizeof(char));

46 //接收GoodBye

47 recv(sock,buffer,256,0);

48 MessageBox(hwnd,buffer,"",0);


原创粉丝点击