初识windows编程之socket套接字
2013-10-25 01:38
411 查看
此文是本人观看“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套接字有初步的一些了解,可以利用客户端与服务器进行一些简单的通信操作。
相关文章推荐
- 网络编程初识和socket套接字
- APIsocket,VS2010,windows非阻塞模式异步套接字编程(看孙鑫视频有感)
- Socket编程创建对话框模式的项目时忘记选择 windows”套接字”的解决办法!
- 【Socket编程】套接字Windows平台C语言实现
- Windows 下的socket(套接字编程)
- Windows 下的socket(套接字编程)
- windows编程之socket套接字2
- linux网络编程之socket(十一):套接字I/O超时设置方法和用select实现超时
- linux网络编程之socket(十一):套接字I/O超时设置方法和用select实现超时
- windows socket编程五种模型
- Windows下C语言的Socket编程例子(TCP和UDP)
- Windows下C语言的Socket编程例子(TCP和UDP)
- Java网络编程之套接字(Socket编程)
- 用Visual C++ 4.0 实现Windows 95 Socket编程
- 网络编程——socket套接字编程(三)
- socket编程在windows和linux下的区别
- 套接字编程,创建套接字socket
- C#2.0 Socket套接字编程之实例初探
- linux基础编程 套接字socket 完整的服务器端多线程socket程序
- UNIX环境高级编程学习之第十六章网络IPC:套接字 - 非阻塞的Socket通信EPoll模型(多路复用), 实用Socket通信模板