此文是本人观看“C语言“也能干大事”之后写的总结,视频链接http://www.rupeng.com/forum/thread-1076-1-3.html 这一节,主要介绍的就是与服务器的简单通信,这里用到的是163的服务器,重点介绍的是客户端对服务器信息的收发; 关键代码如下: #include "stdafx.h" #include <windows.h> #include <winsock2.h> #include <windowsx.h> #include "Resource.h" #include "MainDlg.h" //引入wsock32链接库 #pragma comment(lib,"wsock32") BOOL WINAPI Main_Proc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch(uMsg) { HANDLE_MSG(hWnd, WM_INITDIALOG, Main_OnInitDialog); HANDLE_MSG(hWnd, WM_COMMAND, Main_OnCommand); HANDLE_MSG(hWnd,WM_CLOSE, Main_OnClose); } return FALSE; } BOOL Main_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam) { return TRUE; } void Main_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify) { switch(id) { case IDC_OK: { SocketTest(); } break; default: break; } } void SocketTest() { 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); //123.125.50.135是ping smtp.163.com出来的,后面会讲使用gethostbyname来直接从 //主机名得到ip地址 sa.sin_addr.S_un.S_addr = inet_addr("123.125.50.135"); //为什么不用设置客户端的端口,难道不需要客户端的端口吗? if(connect(sock,(SOCKADDR *)&sa,sizeof(sa))==SOCKET_ERROR) { ShowError(); return; } //接收消息 TCHAR buff[256]; ZeroMemory(buff,sizeof(buff)/sizeof(TCHAR)); recv(sock,buff,sizeof(buff)/sizeof(TCHAR),0); MessageBox(NULL,buff,TEXT("返回消息"),MB_OK); //发送消息 TCHAR hello[]="QUIT\n"; send(sock,hello,sizeof(hello)/sizeof(TCHAR),0); //再接收返回消息 ZeroMemory(buff,sizeof(buff)/sizeof(TCHAR)); recv(sock,buff,sizeof(buff)/sizeof(TCHAR),0); MessageBox(NULL,buff,TEXT("返回消息"),MB_OK); //做事情。把大象放冰箱总共分几步 closesocket(sock); WSACleanup(); } 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); } void Main_OnClose(HWND hwnd) { EndDialog(hwnd, 0); }
总结:
看完这一节,我们可以对网络编程,以及socket套接字有初步的一些了解,可以利用客户端与服务器进行一些简单的通信操作。