您的位置:首页 > 编程语言

MFC下的socket简单编程

2016-07-13 22:34 495 查看
Socket服务端,启动Socket和监听客户端的连接

在StdAfx.h中添加
#include <afxsock.h>


在界面Dlg.cpp中添加
#include <winsock2.h>


还有添加
#pragma comment(lib, "WS2_32.lib")


SOCKET sock;
创建成全局变量

打开网络连接

WSADATA wsaData;
WORD version = MAKEWORD(2, 2);
int ret = WSAStartup(version, &wsaData);
if (ret != 0)
{
MessageBox(_T("初始化失败"));
return false;
}


比较简单的初始化Socket的方式:

bool C线程Dlg::InitSocket()
{
WSADATA wsaData;
WORD version = MAKEWORD(2, 2);
int ret = WSAStartup(version, &wsaData);
if (ret != 0)
{
MessageBox(_T("初始化失败"));
return false;
}

m_socket = socket(AF_INET, SOCK_STREAM, 0);

if (INVALID_SOCKET == m_socket)
{
MessageBox(_T("套接字创建失败"), _T("警告"));
return false;
}

SOCKADDR_IN addrSock;
addrSock.sin_family = AF_INET;
addrSock.sin_port = htons(12345);
addrSock.sin_addr.S_un.S_addr = htonl(INADDR_ANY);

int retval;
retval = bind(m_socket, (SOCKADDR*)&addrSock, sizeof(SOCKADDR));

if (SOCKET_ERROR == retval)
{
closesocket(m_socket);
MessageBox(_T("套接字绑定失败"), _T("警告"));
return false;
}
return true;
}


监听等操作(整合到线程里面):

if (listen(m_socket, 5) == SOCKET_ERROR)//监听客户端,如果是基于UDP的,则不需要listen
{
MessageBox(_T("开启监听失败"), _T("警告"));
return;
}
MessageBox(_T("开始监听"), _T("通知"));

//监听通过
SOCKADDR_IN addrFrom;
int len = sizeof(SOCKADDR);
SOCKET ConnectSocket = accept(m_socket, (sockaddr*)&addrFrom, &len); //得到客户端的IP地址。

char recvBuf[200] = { 0 };//获取客户端发送的消息
int retval = recv(ConnectSocket, recvBuf, 200, 0);
if (SOCKET_ERROR == retval)
return;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mfc socket