Новичок
Профиль
Группа: Участник
Сообщений: 22
Регистрация: 26.10.2006
Репутация: нет Всего: нет
|
Вот код | Код | // ServerclientDlg.h : header file //
#pragma once #pragma comment (lib,"NetAPI32.lib") #ifndef UNICODE #define UNICODE #endif #include <stdio.h> #include <assert.h> #include <windows.h> #include <lm.h> #include "MySocket.h" #include "ClientSocket.h" #include "ConByIP.h" #include "afxwin.h" #include "afxext.h" #include "byname.h"
// CServerclientDlg dialog class CServerclientDlg : public CDialog { // Construction public: CServerclientDlg(CWnd* pParent = NULL); // standard constructor
// Dialog Data enum { IDD = IDD_SERVERCLIENT_DIALOG };
protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
// Implementation protected: HICON m_hIcon;
// Generated message map functions virtual BOOL OnInitDialog(); afx_msg void OnPaint(); afx_msg HCURSOR OnQueryDragIcon(); DECLARE_MESSAGE_MAP() public: void OnAccept(); void OnReceive(); void OnConnect(); void OnSend(); protected: CString m_sData; CMySocket m_pConnectSocket; //Передающий сокет CMySocket m_pListenSocket; //Слушающий сокет CClientSocket m_pClientSocket; public: afx_msg void OnBnClickedListen(); afx_msg void OnBnClickedContoserver(); afx_msg void OnBnClickedSend(); afx_msg void OnMenu(); afx_msg void OnUpdateMenu(CCmdUI *pCmdUI); protected: CMenu* cm; CStatusBar m_wndStatusBar; public: afx_msg void OnUpdateByip(CCmdUI *pCmdUI); protected: CConByIP m_DlgIP; CString m_sIP; public: BOOL ConnectToServer(CString IP, unsigned int PORT); BOOL ListenToClient(unsigned int PORT); afx_msg void OnUpdateCasserver(CCmdUI *pCmdUI); afx_msg void OnUpdateDisconnect(CCmdUI *pCmdUI); void CloseSockets(void); CListBox m_ListBox; void OnClose(void); CString m_sComputerName; CByName m_DlgByName; afx_msg void OnByname(); afx_msg void OnProperty(); };
|
| Код | // ServerclientDlg.cpp : implementation file //
#include "stdafx.h" #include "Serverclient.h" #include "ServerclientDlg.h" #include ".\serverclientdlg.h"
#ifdef _DEBUG #define new DEBUG_NEW #endif
static UINT indicators[]= { IDS_STRING1, IDS_STRING2, IDS_STRING3, // идентификатор второй строки в ресурсах IDS_STRING4 };
// CServerclientDlg dialog
CServerclientDlg::CServerclientDlg(CWnd* pParent /*=NULL*/) : CDialog(CServerclientDlg::IDD, pParent) , m_sData(_T("")) , m_sIP(_T("")) , m_sComputerName(_T("")) { m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); }
void CServerclientDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); DDX_Text(pDX, IDC_DATA, m_sData); DDX_Control(pDX, IDC_MLIST, m_ListBox); }
BEGIN_MESSAGE_MAP(CServerclientDlg, CDialog) ON_WM_PAINT() ON_WM_QUERYDRAGICON() //}}AFX_MSG_MAP ON_BN_CLICKED(IDC_LISTEN, OnBnClickedListen) ON_BN_CLICKED(IDC_CONTOSERVER, OnBnClickedContoserver) ON_BN_CLICKED(IDC_SEND, OnBnClickedSend) ON_UPDATE_COMMAND_UI(ID_BYIP, OnUpdateByip) ON_UPDATE_COMMAND_UI(ID_CASSERVER, OnUpdateCasserver) ON_UPDATE_COMMAND_UI(ID_DISCONNECT, OnUpdateDisconnect) ON_COMMAND(ID_BYNAME, OnByname) ON_COMMAND(ID_PROPERTY, OnProperty) END_MESSAGE_MAP()
// CServerclientDlg message handlers
BOOL CServerclientDlg::OnInitDialog() { CDialog::OnInitDialog();
// Set the icon for this dialog. The framework does this automatically // when the application's main window is not a dialog SetIcon(m_hIcon, TRUE); // Set big icon SetIcon(m_hIcon, FALSE); // Set small icon
// TODO: Add extra initialization here //const char* g="Client"; //cm = new CMenu; m_wndStatusBar.Create(this); // создать строку состояния m_wndStatusBar.SetIndicators(indicators,sizeof(indicators)/sizeof(UINT)); // установить в строку идентификаторы CRect rect; GetClientRect(&rect); //Size the two panes m_wndStatusBar.SetPaneInfo(0,IDS_STRING1,SBPS_NORMAL,80); m_wndStatusBar.SetPaneInfo(1,IDS_STRING2,SBPS_STRETCH,200); m_wndStatusBar.SetPaneInfo(2,IDS_STRING3,SBPS_STRETCH,80); m_wndStatusBar.SetPaneInfo(3,IDS_STRING4,SBPS_STRETCH,rect.Width()-360); RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,IDS_STRING4); GetDlgItem(IDC_SEND)->EnableWindow(FALSE); m_pListenSocket.SetParentDlg(this); m_pConnectSocket.SetParentDlg(this); m_pClientSocket.SetParentDlg(this); m_sComputerName="Noname"; return TRUE; // return TRUE unless you set the focus to a control }
void CServerclientDlg::OnAccept() { //Переводим соединение на передающий сокет m_pListenSocket.Accept(m_pConnectSocket); GetDlgItem(IDC_SEND)->EnableWindow(TRUE); m_wndStatusBar.SetPaneText(1,"Соединение установлено"); }
void CServerclientDlg::OnReceive() { if(m_wndStatusBar.GetPaneText(3)=="Сервер") { m_wndStatusBar.SetPaneText(1,"Получены данные"); char *pBuf=new char[1025]; //Записываем полученные данные в pBuf //Записываем в n количество полученных байтов int n=m_pConnectSocket.Receive(pBuf, 1024); //Отсекаем лишние символы pBuf[n]=NULL; //Записываем данные в переменную, связанную с edit'ом // m_sData=pBuf; UpdateData(FALSE); m_ListBox.AddString(pBuf); }
if(m_wndStatusBar.GetPaneText(3)=="Клиент") { m_wndStatusBar.SetPaneText(1,"Получены данные"); char *pBuf=new char[1025]; //Записываем полученные данные в pBuf //Записываем в n количество полученных байтов int n=m_pClientSocket.Receive(pBuf, 1024); //Отсекаем лишние символы pBuf[n]=NULL; //Записываем данные в переменную, связанную с edit'ом // m_sData=pBuf; UpdateData(FALSE); m_ListBox.AddString(pBuf); }
}
void CServerclientDlg::OnBnClickedListen() { // TODO: Add your control notification handler code here //m_pListenSocket.Create(22222); ListenToClient(22222); //m_wndStatusBar.SetPaneText(1,"Прослушивание порта"); } void CServerclientDlg::OnConnect() { // TODO: Add your control notification handler code here //Подсоединяемся к серверу CString rSocketAddress; UINT rSocketPort; m_pConnectSocket.GetSockName(rSocketAddress,rSocketPort); m_ListBox.AddString(rSocketAddress);
cm->EnableMenuItem(ID_CASSERVER,MF_GRAYED); cm->EnableMenuItem(ID_BYIP,MF_GRAYED); cm->EnableMenuItem(ID_BYNAME,MF_GRAYED); cm->EnableMenuItem(ID_DISCONNECT,MF_ENABLED); //m_wndStatusBar.SetPaneText(3,"Клиент"); //m_wndStatusBar.SetPaneText(1,"Соединение установлено"); GetDlgItem(IDC_SEND)->EnableWindow(TRUE); }
void CServerclientDlg::OnSend() { // TODO: Add your control notification handler code here //Пересылаем }
void CServerclientDlg::OnBnClickedContoserver() { // TODO: Add your control notification handler code here if(ConnectToServer("localhost",22222)) { } }
void CServerclientDlg::OnBnClickedSend() { // TODO: Add your control notification handler code here UpdateData(TRUE); //Забираем данные из edit'а if(m_wndStatusBar.GetPaneText(3)=="Клиент") { CString temp=m_sComputerName+" : "+m_sData; m_ListBox.AddString(temp); if(m_pClientSocket.Send(temp, temp.GetLength())) { m_wndStatusBar.SetPaneText(1,"Данные отправлены"); } else m_wndStatusBar.SetPaneText(1,"Данные не отправлены"); } if(m_wndStatusBar.GetPaneText(3)=="Сервер") { CString temp=m_sComputerName+" : "+m_sData; m_ListBox.AddString(temp); if(m_pConnectSocket.Send(temp,temp.GetLength())) { m_wndStatusBar.SetPaneText(1,"Данные отправлены"); } else m_wndStatusBar.SetPaneText(1,"Данные не отправлены"); } }
void CServerclientDlg::OnUpdateByip(CCmdUI *pCmdUI) { // TODO: Add your command update UI handler code here if(m_DlgIP.DoModal()==IDOK) { if(ConnectToServer(m_DlgIP.m_sIP,m_DlgIP.m_uiPort)) { m_sComputerName=m_DlgIP.m_Name; } } }
BOOL CServerclientDlg::ConnectToServer(CString IP, unsigned int PORT) { m_pClientSocket.Close(); m_pClientSocket.Create(); if(m_pClientSocket.Connect(IP, PORT)) { cm->EnableMenuItem(ID_CASSERVER,MF_GRAYED); cm->EnableMenuItem(ID_BYIP,MF_GRAYED); cm->EnableMenuItem(ID_BYNAME,MF_GRAYED); cm->EnableMenuItem(ID_DISCONNECT,MF_ENABLED); GetDlgItem(IDC_CONTOSERVER)->EnableWindow(FALSE); GetDlgItem(IDC_LISTEN)->EnableWindow(FALSE); GetDlgItem(IDC_SEND)->EnableWindow(TRUE); m_wndStatusBar.SetPaneText(3,"Клиент"); m_wndStatusBar.SetPaneText(1,"Соединение установлено"); GetDlgItem(IDC_SEND)->EnableWindow(TRUE);
return TRUE; } else { m_wndStatusBar.SetPaneText(1,"Невозможно установить соединение"); return FALSE; } }
BOOL CServerclientDlg::ListenToClient(unsigned int PORT) { m_pListenSocket.Close(); m_pListenSocket.Create(PORT); if(m_pListenSocket.Listen()) { cm->EnableMenuItem(ID_CASSERVER,MF_GRAYED); cm->EnableMenuItem(ID_BYIP,MF_GRAYED); cm->EnableMenuItem(ID_BYNAME,MF_GRAYED); cm->EnableMenuItem(ID_DISCONNECT,MF_ENABLED); GetDlgItem(IDC_CONTOSERVER)->EnableWindow(FALSE); GetDlgItem(IDC_LISTEN)->EnableWindow(FALSE); //GetDlgItem(IDC_SEND)->EnableWindow(TRUE); m_sComputerName="Server"; m_wndStatusBar.SetPaneText(3,"Сервер"); m_wndStatusBar.SetPaneText(1,"Ожидание подключения"); //SOCKADDR* lpSockAddr; //int * lpSockAddrLen; return TRUE; } else return FALSE; }
void CServerclientDlg::OnUpdateCasserver(CCmdUI *pCmdUI) { if(ListenToClient(22222)) { } // TODO: Add your command update UI handler code here }
void CServerclientDlg::OnUpdateDisconnect(CCmdUI *pCmdUI) { // TODO: Add your command update UI handler code here CloseSockets(); cm->EnableMenuItem(ID_CASSERVER,MF_ENABLED); cm->EnableMenuItem(ID_BYIP,MF_ENABLED); cm->EnableMenuItem(ID_BYNAME,MF_ENABLED); cm->EnableMenuItem(ID_DISCONNECT,MF_GRAYED); GetDlgItem(IDC_CONTOSERVER)->EnableWindow(TRUE); GetDlgItem(IDC_LISTEN)->EnableWindow(TRUE); GetDlgItem(IDC_SEND)->EnableWindow(FALSE); m_wndStatusBar.SetPaneText(3,"Нет"); m_wndStatusBar.SetPaneText(1,"Нет"); }
void CServerclientDlg::CloseSockets(void) { m_pListenSocket.Close(); m_pConnectSocket.Close(); m_pClientSocket.Close(); m_pListenSocket.Create(22222); m_pClientSocket.Create(); }
void CServerclientDlg::OnClose(void) { CloseSockets(); cm->EnableMenuItem(ID_CASSERVER,MF_ENABLED); cm->EnableMenuItem(ID_BYIP,MF_ENABLED); cm->EnableMenuItem(ID_BYNAME,MF_ENABLED); cm->EnableMenuItem(ID_DISCONNECT,MF_GRAYED); GetDlgItem(IDC_CONTOSERVER)->EnableWindow(TRUE); GetDlgItem(IDC_LISTEN)->EnableWindow(TRUE); GetDlgItem(IDC_SEND)->EnableWindow(FALSE); m_wndStatusBar.SetPaneText(3,"Нет"); m_wndStatusBar.SetPaneText(1,"Соединение оборвано"); }
void CServerclientDlg::OnByname() { // TODO: Add your command handler code here if(m_DlgByName.DoModal()==IDOK) { if(ConnectToServer(m_DlgByName.m_sCompName,m_DlgByName.m_uiPort)) { m_sComputerName=m_DlgByName.m_sName; } } }
|
Это сообщение отредактировал(а) andrew_ - 14.12.2006, 09:33
|