如题
谁有VC++的基于MFC对话框的Socket通讯的代码,主要是完成服务器和客户端的发送和接受数据。
服务器和客户端都有连接,发送,接受等按钮和一个文本显示发送和接受的数据
如果您有相关代码请发到
谁有VC++的基于MFC对话框的Socket通讯的代码,主要是完成服务器和客户端的发送和接受数据。
服务器和客户端都有连接,发送,接受等按钮和一个文本显示发送和接受的数据
如果您有相关代码请发到
解决方案 »
- 如何开发条码扫描程序
- CString用加号连接失败,数据丢失?
- 请问显示图片的一般步骤
- 怎么实现类似VC中,点击 workspace 中的某个文件即可在右边的 VIEW 中显示该文件的内容??
- ???????关于换行符的问题?????已经问过若干次,均不得解 !!!!1
- 看看自己能不能做出来。第一个答对的给100分!!!
- 0xfeeefeee
- 我想知道,内存释放软件的原理是什么,哪位能说一下吗?
- 第一次用boundschecker激动并兴奋!真是好东西阿!
- if(WSAStartup(MAKEWORD(2,2),&wsd)!=0)中&wsd是什么意思啊?书上没写明。
- 如何 隐藏 treeview 的滚动条
- textbox通过模糊查询 直接控制listctrl的显示 VC++
//#include "stdafx.h"
#include "Client.h"
#include "ClientDlg.h"
#include "afxdialogex.h"#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// CClientDlg 对话框
CClientDlg::CClientDlg(CWnd* pParent /*=NULL*/)
: CDialogEx(CClientDlg::IDD, pParent)
, m_strEdtData(_T(""))
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
m_nPort = 5025;
m_strIPAdde = "127.0.0.1";
}void CClientDlg::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
DDX_Text(pDX, IDC_EDT_DATA, m_strEdtData);
}BEGIN_MESSAGE_MAP(CClientDlg, CDialogEx)
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_WM_DESTROY()
ON_BN_CLICKED(IDC_BTN_CONNECT, &CClientDlg::OnBnClickedBtnConnect)
ON_BN_CLICKED(IDC_BTN_SEND, &CClientDlg::OnClickedBtnSend)
ON_BN_CLICKED(IDC_BTN_REVC, &CClientDlg::OnClickedBtnRevc)
ON_BN_CLICKED(IDC_BTN_EXIT, &CClientDlg::OnClickedBtnExit)
END_MESSAGE_MAP()
// CClientDlg 消息处理程序BOOL CClientDlg::OnInitDialog()
{
CDialogEx::OnInitDialog(); // 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
// 执行此操作
SetIcon(m_hIcon, TRUE); // 设置大图标
SetIcon(m_hIcon, FALSE); // 设置小图标 // TODO: 在此添加额外的初始化代码 return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}// 如果向对话框添加最小化按钮,则需要下面的代码
// 来绘制该图标。对于使用文档/视图模型的 MFC 应用程序,
// 这将由框架自动完成。void CClientDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // 用于绘制的设备上下文 SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0); // 使图标在工作区矩形中居中
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2; // 绘制图标
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialogEx::OnPaint();
}
}//当用户拖动最小化窗口时系统调用此函数取得光标
//显示。
HCURSOR CClientDlg::OnQueryDragIcon()
{
return static_cast<HCURSOR>(m_hIcon);
}bool CClientDlg::InitSendSocket()
{
if (!m_sockSend.Create(m_nPort, SOCK_DGRAM, NULL))
{
AfxMessageBox(_T("Send Create Failed!"));
return FALSE;
}
if (SOCKET_ERROR == m_sockSend.Bind(m_nPort, m_strIPAdde))
{
AfxMessageBox(_T("Send Bind Failed!"));
return FALSE;
}
return TRUE;
}bool CClientDlg::InitRecvSocket()
{
if (!m_sockRecv.Create())
{
AfxMessageBox(_T("Recv Create Failed!"));
return FALSE;
} if (!m_sockRecv.Connect(m_strIPAdde, m_nPort))
{
AfxMessageBox(_T("Recv Connect Failed!"));
return FALSE;
} return TRUE;
}void CClientDlg::OnBnClickedBtnConnect()
{
// TODO: Add your control notification handler code here
UnInitSocket();
InitSendSocket();
InitRecvSocket();
}
void CClientDlg::OnClickedBtnSend()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE); m_sockSend.SendTo(m_strEdtData, m_strEdtData.GetLength(), m_nPort, m_strIPAdde, 0);
}
void CClientDlg::OnClickedBtnRevc()
{
// TODO: Add your control notification handler code here
char szRecv[256]; int nRecv = m_sockRecv.Receive(szRecv, 256, 0); if (nRecv > 0)
{
m_strEdtData.Format(_T("%s"), szRecv);
UpdateData(FALSE);
}
}
void CClientDlg::OnClickedBtnExit()
{
// TODO: Add your control notification handler code here
UnInitSocket();
}void CClientDlg::UnInitSocket()
{
if (NULL != m_sockRecv)
{
m_sockRecv.Close();
} if (NULL != m_sockSend)
{
m_sockSend.Close();
}
}void CClientDlg::OnDestroy()
{
CDialogEx::OnDestroy(); // TODO: Add your message handler code here
UnInitSocket();
}
//#include "stdafx.h"
#include "Server.h"
#include "ServerDlg.h"
#include "afxdialogex.h"#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// CServerDlg 对话框
CServerDlg::CServerDlg(CWnd* pParent /*=NULL*/)
: CDialogEx(CServerDlg::IDD, pParent)
, m_strEdtData(_T(""))
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
m_nPort = 5025;
m_strIPAddr = "127.0.0.1";
}void CServerDlg::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
DDX_Text(pDX, IDC_EDT_DATA, m_strEdtData);
}BEGIN_MESSAGE_MAP(CServerDlg, CDialogEx)
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_BTN_CONNECT, &CServerDlg::OnClickedBtnConnect)
ON_BN_CLICKED(IDC_BTN_EXIT, &CServerDlg::OnClickedBtnExit)
ON_BN_CLICKED(IDC_BTN_RECV, &CServerDlg::OnClickedBtnRecv)
ON_BN_CLICKED(IDC_BTN_SEND, &CServerDlg::OnClickedBtnSend)
END_MESSAGE_MAP()
// CServerDlg 消息处理程序BOOL CServerDlg::OnInitDialog()
{
CDialogEx::OnInitDialog(); // 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
// 执行此操作
SetIcon(m_hIcon, TRUE); // 设置大图标
SetIcon(m_hIcon, FALSE); // 设置小图标 // TODO: 在此添加额外的初始化代码 return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}// 如果向对话框添加最小化按钮,则需要下面的代码
// 来绘制该图标。对于使用文档/视图模型的 MFC 应用程序,
// 这将由框架自动完成。void CServerDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // 用于绘制的设备上下文 SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0); // 使图标在工作区矩形中居中
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2; // 绘制图标
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialogEx::OnPaint();
}
}//当用户拖动最小化窗口时系统调用此函数取得光标
//显示。
HCURSOR CServerDlg::OnQueryDragIcon()
{
return static_cast<HCURSOR>(m_hIcon);
}void CServerDlg::OnClickedBtnConnect()
{
// TODO: Add your control notification handler code here
UnInitSocket();
InitSocketSend();
InitSocketRecv();
}
void CServerDlg::OnClickedBtnExit()
{
// TODO: Add your control notification handler code here
UnInitSocket();
}
void CServerDlg::OnClickedBtnRecv()
{
// TODO: Add your control notification handler code here
char szRecv[256];
m_sockRecv.ReceiveFrom(szRecv, 256, m_strIPAddr, m_nPort, 0);
m_strEdtData = szRecv;
UpdateData(FALSE);
}
void CServerDlg::OnClickedBtnSend()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
m_sockSend.Send(m_strEdtData, 256, 0);
}void CServerDlg::UnInitSocket()
{
if (NULL != m_sockRecv)
{
m_sockRecv.Close();
} if (NULL != m_sockSend)
{
m_sockSend.Close();
}
}bool CServerDlg::InitSocketSend()
{
CSocket sockListen;
if (sockListen.Create(m_nPort, SOCK_STREAM, m_strIPAddr))
{
AfxMessageBox(_T("Listen Create Failed!"));
return FALSE;
} if (SOCKET_ERROR == sockListen.Bind(m_nPort, m_strIPAddr))
{
AfxMessageBox(_T("Listen Bind Failed!"));
return FALSE;
} sockListen.Listen(5); sockListen.Accept(m_sockSend);
sockListen.Close(); return TRUE;
}bool CServerDlg::InitSocketRecv()
{
if ( m_sockRecv.Create(m_nPort, SOCK_DGRAM, m_strIPAddr))
{
AfxMessageBox(_T("Recv Create Failed!"));
return FALSE;
} if (SOCKET_ERROR == m_sockRecv.Bind(m_nPort, m_strIPAddr))
{
AfxMessageBox(_T("Recv Bind Failed!"));
return FALSE;
} return TRUE;
}