|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
16.10.2017, 14:44 | #1 |
Новичок
Джуниор
Регистрация: 16.10.2017
Сообщений: 3
|
MFC клиент
// client2Dlg.cpp : файл реализации
// #include "stdafx.h" #include "client2.h" #include "client2Dlg.h" #include "afxdialogex.h" #include <stdio.h> #include <string.h> #include <winsock2.h> #include <windows.h> #pragma warning(disable : 4996) #define PORT 666 #define SERVERADDR "127.0.0.1" #define _CRT_NONSTDC_NO_WARNINGS #ifdef _DEBUG #define new DEBUG_NEW #endif // Диалоговое окно CAboutDlg используется для описания сведений о приложении class CAboutDlg : public CDialogEx { public: CAboutDlg(); // Данные диалогового окна #ifdef AFX_DESIGN_TIME enum { IDD = IDD_ABOUTBOX }; #endif protected: virtual void DoDataExchange(CDataExchange* pDX); // поддержка DDX/DDV // Реализация protected: DECLARE_MESSAGE_MAP() }; CAboutDlg::CAboutDlg() : CDialogEx(IDD_ABOUTBOX) { } void CAboutDlg::DoDataExchange(CDataExch ange* pDX) { CDialogEx::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx) END_MESSAGE_MAP() // диалоговое окно Cclient2Dlg Cclient2Dlg::Cclient2Dlg(CWnd* pParent /*=NULL*/) : CDialogEx(IDD_CLIENT2_DIALOG, pParent) { m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); } void Cclient2Dlg::DoDataExchange(CDataEx change* pDX) { CDialogEx::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(Cclient2Dlg, CDialogEx) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_BN_CLICKED(IDOK, &Cclient2Dlg::OnBnClickedOk) END_MESSAGE_MAP() // обработчики сообщений Cclient2Dlg BOOL Cclient2Dlg::OnInitDialog() { CDialogEx::OnInitDialog(); // Добавление пункта "О программе..." в системное меню. // IDM_ABOUTBOX должен быть в пределах системной команды. ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX < 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) { BOOL bNameValid; CString strAboutMenu; bNameValid = strAboutMenu.LoadString(IDS_ABOUTBO X); ASSERT(bNameValid); if (!strAboutMenu.IsEmpty()) { pSysMenu->AppendMenu(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); } } // Задает значок для этого диалогового окна. Среда делает это автоматически, // если главное окно приложения не является диалоговым SetIcon(m_hIcon, TRUE); // Крупный значок SetIcon(m_hIcon, FALSE); // Мелкий значок // TODO: добавьте дополнительную инициализацию return TRUE; // возврат значения TRUE, если фокус не передан элементу управления } void Cclient2Dlg::OnSysCommand(UINT nID, LPARAM lParam) { if ((nID & 0xFFF0) == IDM_ABOUTBOX) { CAboutDlg dlgAbout; dlgAbout.DoModal(); } else { CDialogEx::OnSysCommand(nID, lParam); } } // При добавлении кнопки свертывания в диалоговое окно нужно воспользоваться приведенным ниже кодом, // чтобы нарисовать значок. Для приложений MFC, использующих модель документов или представлений, // это автоматически выполняется рабочей областью. void Cclient2Dlg::OnPaint() { if (IsIconic()) { CPaintDC dc(this); // контекст устройства для рисования SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafe Hdc()), 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 Cclient2Dlg::OnQueryDragIcon() { return static_cast<HCURSOR>(m_hIcon); } void Cclient2Dlg::OnBnClickedOk() { int main(int argc, char* argv[]); CString str; char buff[1024]; AfxMessageBox(_T("TCP DEMO CLIENT\n")); // Шаг 1 инициализация библиотеки Winsock if (WSAStartup(0x202, (WSADATA *)&buff[0])) { AfxMessageBox(_T("WSAStart error %d\n", WSAGetLastError())); } // Шаг 2 - создание сокета SOCKET my_sock; my_sock = socket(AF_INET, SOCK_STREAM, 0); if (my_sock<0) { AfxMessageBox(_T("Socket() error %d\n", WSAGetLastError())); } // Шаг 3 - установка соединения // заполнение структуры sockaddr_in – указание адреса и порта сервера sockaddr_in dest_addr; dest_addr.sin_family = AF_INET; dest_addr.sin_port = htons(PORT); HOSTENT *hst; // преобразование IP адреса из символьного в сетевой формат if (inet_addr(SERVERADDR) != INADDR_NONE) dest_addr.sin_addr.s_addr = inet_addr(SERVERADDR); else // попытка получить IP адрес по доменному имени сервера if (hst = gethostbyname(SERVERADDR)) // hst->h_addr_list содержит не массив адресов, // а массив указателей на адреса ((unsigned long *)&dest_addr.sin_addr)[0] = ((unsigned long **)hst->h_addr_list)[0][0]; else { AfxMessageBox(_T("Invalid address %s\n", SERVERADDR)); closesocket(my_sock); WSACleanup(); } // адрес сервера получен – пытаемся установить соединение if (connect(my_sock, (sockaddr *)&dest_addr, sizeof(dest_addr))) { AfxMessageBox(_T("Connect error %d\n", WSAGetLastError())); } AfxMessageBox(_T("Соединение с %s успешно установлено\n\ Type quit for quit\n\n", SERVERADDR)); // Шаг 4 - чтение и передача сообщений int nsize; while ((nsize = recv(my_sock, &buff[0], sizeof(buff) - 1, 0)) != SOCKET_ERROR) { // ставим завершающий ноль в конце строки buff[nsize] = 0; str = CString(buff); AfxMessageBox(_T("", str)); //BuffBox.AddString(str); UpdateData(false); char asd[] = "Текст для отправки на сервер"; int vxc = sizeof(asd); while (vxc != 0) { send(my_sock, &asd[0], nsize, 0); vxc--; } // передаем строку клиента серверу send(my_sock, &buff[0], nsize, 0); } AfxMessageBox(_T("Recv error %d\n", WSAGetLastError())); closesocket(my_sock); WSACleanup(); CDialogEx::OnOK(); } |
16.10.2017, 15:21 | #2 |
Программист
Участник клуба
Регистрация: 23.06.2009
Сообщений: 1,772
|
Вопрос-то в чём?
|
18.10.2017, 22:41 | #3 |
Новичок
Джуниор
Регистрация: 16.10.2017
Сообщений: 3
|
1234
#include <stdio.h>
#include <string.h> #include <winsock2.h> #include <windows.h> #pragma warning(disable : 4996) #define PORT 666 #define SERVERADDR "127.0.0.1" #define _CRT_NONSTDC_NO_WARNINGS int main(int argc, char* argv[]); CString str; char buff[1024]; AfxMessageBox(_T("TCP DEMO CLIENT\n")); // Шаг 1 инициализация библиотеки Winsock if (WSAStartup(0x202, (WSADATA *)&buff[0])) { AfxMessageBox(_T("WSAStart error %d\n", WSAGetLastError())); } // Шаг 2 - создание сокета SOCKET my_sock; my_sock = socket(AF_INET, SOCK_STREAM, 0); if (my_sock<0) { AfxMessageBox(_T("Socket() error %d\n", WSAGetLastError())); } // Шаг 3 - установка соединения // заполнение структуры sockaddr_in – указание адреса и порта сервера sockaddr_in dest_addr; dest_addr.sin_family = AF_INET; dest_addr.sin_port = htons(PORT); HOSTENT *hst; // преобразование IP адреса из символьного в сетевой формат if (inet_addr(SERVERADDR) != INADDR_NONE) dest_addr.sin_addr.s_addr = inet_addr(SERVERADDR); else // попытка получить IP адрес по доменному имени сервера if (hst = gethostbyname(SERVERADDR)) // hst->h_addr_list содержит не массив адресов, // а массив указателей на адреса ((unsigned long *)&dest_addr.sin_addr)[0] = ((unsigned long **)hst->h_addr_list)[0][0]; else { AfxMessageBox(_T("Invalid address %s\n", SERVERADDR)); closesocket(my_sock); WSACleanup(); } // адрес сервера получен – пытаемся установить соединение if (connect(my_sock, (sockaddr *)&dest_addr, sizeof(dest_addr))) { AfxMessageBox(_T("Connect error %d\n", WSAGetLastError())); } AfxMessageBox(_T("Соединение успешно установлено\n\ Type quit for quit\n\n", SERVERADDR)); // Шаг 4 - чтение и передача сообщений int nsize; CString str; ((nsize = recv(my_sock, &buff[0], sizeof(buff) - 1, 0)) != SOCKET_ERROR); // ставим завершающий ноль в конце строки buff[nsize] = 0; str = CString(buff); SetDlgItemText(IDC_EDIT1, str); char asd[] = "Текст для отправки на сервер"; int i = sizeof(asd); while (i != 0) { send(my_sock, &asd[0], nsize, 0); i--; } AfxMessageBox(_T("Receive error! %d\n", WSAGetLastError())); closesocket(my_sock); WSACleanup(); |
18.10.2017, 23:38 | #4 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,342
|
Вопрос-то в чём?
|
19.10.2017, 00:20 | #5 |
Программист
Участник клуба
Регистрация: 23.06.2009
Сообщений: 1,772
|
Ну второе сообщение = это консольный клиент TCP, а в первом случае этот же клиент был без смазки впендюрен в обработчик кнопки MFC проекта.
Посмотрев в хрустальный шар, глубокомысленно изрекаю: человек хочет оконный клиент TCP на базе MFC |
19.10.2017, 01:56 | #6 |
Новичок
Джуниор
Регистрация: 16.10.2017
Сообщений: 3
|
Просто завтра у меня пересдача по Программированию и сюда залил код чтобы аккуратно использовать
|
19.10.2017, 02:07 | #7 | |
Новичок
Джуниор
Регистрация: 19.10.2017
Сообщений: 3
|
Цитата:
|
|
19.10.2017, 02:29 | #8 |
Новичок
Джуниор
Регистрация: 19.10.2017
Сообщений: 3
|
void CMFCApplication1Dlg::OnBnClickedBut ton1()
{ char buff[1024]; AfxMessageBox(_T("TCP DEMO CLIENT\n")); // Шаг 1 инициализация библиотеки Winsock if (WSAStartup(0x202, (WSADATA *)&buff[0])) { AfxMessageBox(_T("WSAStart error %d\n", WSAGetLastError())); //return -1; } // Шаг 2 создание сокета SOCKET my_sock; my_sock = socket(AF_INET, SOCK_STREAM, 0); if (my_sock<0) { AfxMessageBox(_T("Socket() error", WSAGetLastError())); //return -1; } // Шаг 3 установка соединения // заполнение структуры sockaddr_in – указание адреса и порта сервера sockaddr_in dest_addr; dest_addr.sin_family = AF_INET; dest_addr.sin_port = htons(PORT); HOSTENT *hst; // преобразование IP адреса из символьного в сетевой формат if (inet_addr(SERVERADDR) != INADDR_NONE) dest_addr.sin_addr.s_addr = inet_addr(SERVERADDR); else // попытка получить IP адрес по доменному имени сервера if (hst = gethostbyname(SERVERADDR)) // hst>h_addr_list содержит не массив адресов, // а массив указателей на адреса ((unsigned long *)&dest_addr.sin_addr)[0] = ((unsigned long **)hst->h_addr_list)[0][0]; else { AfxMessageBox(_T("Invalid address", SERVERADDR)); closesocket(my_sock); WSACleanup(); //return -1; } // адрес сервера получен – пытаемся установить соединение if (connect(my_sock, (sockaddr *)&dest_addr, sizeof(dest_addr))) { AfxMessageBox(_T("Connect error %d\n", WSAGetLastError())); //return -1; } AfxMessageBox(_T("Соединение с сервером успешно установлено Type quit for quit", SERVERADDR)); // Шаг 4 чтение и передача сообщений int nsize; CString str; ((nsize = recv(my_sock, &buff[0], sizeof(buff)-1, 0)) != SOCKET_ERROR); buff[nsize] = 0; str = CString(buff); SetDlgItemText(IDC_EDIT1, str); char asd[] = "shatokhin"; int i = sizeof(asd); // выводим на экран //printf("S=>C:%s", buff); // читаем пользовательский ввод с клавиатуры //printf("S<=C:"); fgets(&buff[0], sizeof(buff)1, stdin); // проверка на "quit" //if (!strcmp(&buff[0], "quit\n")) //{ // Корректный выход //printf("Exit..."); //closesocket(my_sock); //WSACleanup(); //return 0; //} // передаем строку клиента серверу while (i != 0) { send(my_sock, &asd[0], nsize, 0); i--; } /*AfxMessageBox(_T("Recv error", WSAGetLastError())); closesocket(my_sock); WSACleanup();*/ //return -1; } void CMFCApplication1Dlg::OnBnClickedOk( ) { CString cat; GetDlgItemText(IDC_EDIT1, cat); AfxMessageBox(cat); } |
19.10.2017, 02:30 | #9 | |
Новичок
Джуниор
Регистрация: 19.10.2017
Сообщений: 3
|
Цитата:
// #include "stdafx.h" #include "MFCApplication1.h" #include "MFCApplication1Dlg.h" #include "afxdialogex.h" #include <stdio.h> #include <string.h> #include <winsock2.h> #include <windows.h> #define PORT 666 #define SERVERADDR "127.0.0.1" #ifdef _DEBUG #define new DEBUG_NEW #endif #pragma warning(disable: 4996) |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Клиент-серверное приложение C++/MFC | MaGWaY_minsk | Фриланс | 1 | 08.06.2013 06:37 |
MFC база данных на клиент-серверной основе | Skullet | C/C++ Сетевое программирование | 2 | 17.12.2012 21:23 |
Drag&Drop NO MFC! NO MFC! | Антоним | Win Api | 1 | 12.11.2012 21:43 |