初识windows编程之socket套接字

此文是本人观看“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套接字有初步的一些了解,可以利用客户端与服务器进行一些简单的通信操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值