用途:已经写好的mfc例程如果没有socket而需要增加socket采用这个办法,作用类似于新建MFC工程时勾选套接字。
1、在入口程序的 CWinApp::InitInstance();后边添加下面的代码
if (!AfxSocketInit())
{
AfxMessageBox(IDP_SOCKETS_INIT_FAILED);
return FALSE;
}
2、在对话框程序的头文件中#pragma once后面添加对库的引用
#include <afxsock.h>
3、在对话框cpp文件开头定义接收socket的字符串
char szRecvMsg[256] = {0};
4、在需要打开socket的地方拷贝如下代码:
/
//与网络相关
if (!AfxSocketInit())
{
// AfxMessageBox(IDP_SOCKETS_INIT_FAILED);
return 1;
}
//Cmedia_tj_6Dlg *aDlg = (Cmedia_tj_6Dlg *)lParam;
CString strPort;
//aDlg->GetDlgItemText(IDC_EDIT_PORT, strPort);
UINT nPort = 8808;
//socket------------------------------------------------
CSocket aSocket, serverSocket;
if (!aSocket.Socket())
{
char szError[256] = {0};
sprintf(szError, "Create Faild: %d", GetLastError());
AfxMessageBox(szError);
// return 1;
}
BOOL bOptVal = TRUE;
int bOptLen = sizeof(BOOL);
aSocket.SetSockOpt(SO_REUSEADDR, (void *)&bOptVal, bOptLen, SOL_SOCKET);
if (!aSocket.Bind(nPort))
{
char szError[256] = {0};
sprintf(szError, "Bind Faild: %d", GetLastError());
AfxMessageBox(szError);
// return 1;
}
if(!aSocket.Listen(10))
{
char szError[256] = {0};
sprintf(szError, "Listen Faild: %d", GetLastError());
AfxMessageBox(szError);
// return 1;
}
CString strText;
//aDlg->GetDlgItemText(IDC_EDIT_LOG, strText);
// strText += "Server Start! \r\n";
// aDlg->SetDlgItemText(IDC_EDIT_LOG, strText);
剩下的就是accept了
如果是client端
CSocket m_socket;
m_socket.Create();
if (m_socket.Connect("127.0.0.1",6666) ){m_socket.Send("00",2);}
m_socket.Close();