bsuir.info
БГУИР: Дистанционное и заочное обучение
(файловый архив)
Вход (быстрый)
Регистрация
Категории каталога
Другое [183]
Бухучет [16]
ВМиМОвЭ [4]
ОДМиТА [13]
ОЛОБД [17]
ООПиП [58]
ОС [19]
ПСОД [44]
Форма входа
Логин:
Пароль:
Поиск
Статистика

Онлайн всего: 11
Гостей: 11
Пользователей: 0
Файловый архив
Файлы » ИСиТвЭ » Другое

ИСиТвЭ (з.), Компьютерные сети, Контрольная работа №1, вар.16, 2017
Подробности о скачивании 27.02.2017, 14:30
16 вариантЧасть 1
Задание 1
Осуществить взаимодействие клиента и сервера на основе протокола TCP/IP. Функционирование клиента и сервера реализовать следующим образом: клиент посылает два числа серверу и одну из математических операций: "*", "/", "+", "-" ,- сервер соответственно умножает, делит, складывает либо вычитает эти два числа и ответ посылает ответ назад клиенту.
Нам необходимо написать две программы серверную и клиентскую.
В серверной программе инициализируем WinSock API, используя функцию WSAStartup. Создаем сокет, использующий протокол TCP, при помощи функции socket. Устанавливаем сокету адрес и порт, используя функцию bind. Далее ожидаем установки соединения с клиентом, для чего используем функцию listen. После прихода с клиента предложения о соединении, принимаем его, используя функцию accept. И начинаем принимать данные с клиента, используя функцию recv. Принятые данные обрабатываем, исходя из условия задачи, и отсылаем результат обработки, используя функцию send. В конце программы закрываем сокет, при помощи функции closesocket, и прекращаем работу WinSock API, используя функцию WSACleanup.
В клиентской программе инициализируем WinSock API, используя функцию WSAStartup. Создаем сокет, использующий протокол TCP, при помощи функции socket. Устанавливаем соединение с сервером, используя функцию connect. Считываем данные с потока входа, при помощи функции std::cin.getline, и отсылаем их на сервер, используя функцию send. Получаем результат с сервера, используя функцию recv, и выводим его на экран, посредством функции std::cout. В конце программы закрываем сокет, при помощи функции closesocket, и прекращаем работу WinSock API, используя функцию WSACleanup.
#include <winsock2.h>
#include <iostream>
#include <stdlib.h>

#pragma comment(lib,"Ws2_32.lib")

int main() {
setlocale(LC_ALL, "Russian");
WORD wVersionRequested;
WSADATA wsaData;
wVersionRequested = MAKEWORD(2, 2);
WSAStartup(wVersionRequested, &wsaData);
struct sockaddr_in peer;
peer.sin_family = AF_INET;
peer.sin_port = htons(1280);
// т.к. клиент и сервер на одном компьютере,
// пишем адрес 127.0.0.1
peer.sin_addr.s_addr = inet_addr("127.0.0.1");
SOCKET s = socket(AF_INET, SOCK_STREAM, 0);
connect(s, (struct sockaddr*) &peer, sizeof(peer));
char buf[255], b[255];
std::cout << "Введите два числа и математическую операцию (+, -, *, или /)
между ними.\n Например: 2+2" << std::endl;
std::cin.getline(buf, 100, '\n');
send(s, buf, sizeof(buf), 0);
if (recv(s, b, sizeof(b), 0) != 0) {
b[strlen(b)] = '\0'; //Удаление ненужных символов
// в конце строки
std::cout << b << std::endl;
std::cin.get();
}
closesocket(s);
WSACleanup();
return 0;

}

#include <winsock2.h>
#include <iostream>
#include <stdio.h>
#include <stdlib.h>

#pragma comment(lib,"Ws2_32.lib")

int main() {
WORD wVersionRequested;
WSADATA wsaData;
wVersionRequested = MAKEWORD(2, 2);
WSAStartup(wVersionRequested, &wsaData);

SOCKET s = socket(AF_INET, SOCK_STREAM, 0);

struct sockaddr_in local;
local.sin_family = AF_INET;
local.sin_port = htons(1280);
local.sin_addr.s_addr = htonl(INADDR_ANY);
int c = bind(s, (struct sockaddr*)&local, sizeof(local));

int r = listen(s, 5);

while (true) {
char res[255], b[255];
//структура определяет удаленный адрес,
// с которым соединяется сокет
sockaddr_in remote_addr;
int size = sizeof(remote_addr);
SOCKET s2 = accept(s, (struct sockaddr*)&remote_addr, &size);

while (recv(s2, b, sizeof(b), 0) != 0) {
int i1 = 0;
int i2 = 0;
if (strchr(b, '+') != 0) {
i1 = atoi(strtok(b, "+"));
i2 = atoi(strtok(0, "+"));
itoa(i1 + i2, res, 10);
}
else if (strchr(b, '-') != 0) {
i1 = atoi(strtok(b, "-"));
i2 = atoi(strtok(0, "-"));
itoa(i1 - i2, res, 10);
}
else if (strchr(b, '*') != 0) {
i1 = atof(strtok(b, "*"));
i2 = atof(strtok(0, "*"));
itoa(i1 * i2, res, 10);
}
else if (strchr(b, '/') != 0) {
i1 = atof(strtok(b, "/"));
i2 = atof(strtok(0, "/"));
itoa(i1 / i2, res, 10);
}
// Посылает данные на соединенный сокет
send(s2, res, sizeof(res)-2, 0);
}

closesocket(s2);
}

WSACleanup();
}



Задание 2
Осуществить взаимодействие клиента и сервера на основе протокола UDP. Функционирование клиента и сервера реализовать следующим образом: клиент посылает серверу строку, сервер возвращает эту же строку, но гласные в ней должны быть в верхнем регистре.
Нам необходимо написать две программы серверную и клиентскую.
В серверной программе инициализируем WinSock API, используя функцию WSAStartup. Создаем сокет, использующий протокол UDP, при помощи функции socket. Устанавливаем сокету адрес и порт, используя функцию bind. Далее ожидаем установки соединения с клиентом, для чего используем функцию listen. Принимаем данные с клиента, используя функцию recvfrom. Принятые данные обрабатываем, исходя из условия задачи, и отсылаем результат обработки, используя функцию sendto. В конце программы закрываем сокет, при помощи функции closesocket, и прекращаем работу WinSock API, используя функцию WSACleanup.
В клиентской программе инициализируем WinSock API, используя функцию WSAStartup. Создаем сокет, использующий протокол UDP, при помощи функции socket. Устанавливаем соединение с сервером, используя функцию connect. Считываем данные с потока входа, при помощи функции std::cin.getline, и отсылаем их на сервер, используя функцию sendto. Получаем результат с сервера, используя функцию recvfrom, и выводим его на экран, посредством функции std::cout. В конце программы закрываем сокет, при помощи функции closesocket, и прекращаем работу WinSock API, используя функцию WSACleanup.
#include <winsock2.h>
#include <iostream>
#include <stdio.h>
#include <stdlib.h>

#pragma comment(lib,"Ws2_32.lib")

int main() {
WORD wVersionRequested;
WSADATA wsaData;
wVersionRequested = MAKEWORD(2, 2);
WSAStartup(wVersionRequested, &wsaData);

SOCKET s = socket(AF_INET, SOCK_DGRAM, 0);

struct sockaddr_in local;
local.sin_family = AF_INET;
local.sin_port = htons(1280);
local.sin_addr.s_addr = htonl(INADDR_ANY);
int size = sizeof(local);
int c = bind(s, (struct sockaddr*)&local, size);

int r = listen(s, 5);

char *vowels = "eioau";
int difference = 'A' - 'a';
while (true) {
char res[255], b[255];
while (recvfrom(s, b, sizeof(b), 0, (sockaddr *)&local, &size) != 0) {
for (int i = 0; i < strlen(b); i++) {
if (strchr(vowels, *(b + i)) != 0) {
*(b + i) += difference;
}
}
// Посылает данные на соединенный сокет
sendto(s, b, sizeof(b), 0, (struct sockaddr*)&local, size);
}

closesocket(s);
}

WSACleanup();
}

#include <winsock2.h>
#include <iostream>
#include <stdlib.h>

#pragma comment(lib,"Ws2_32.lib")

int main() {
WORD wVersionRequested;
WSADATA wsaData;
wVersionRequested = MAKEWORD(2, 2);
WSAStartup(wVersionRequested, &wsaData);
struct sockaddr_in peer;
peer.sin_family = AF_INET;
peer.sin_port = htons(1280);
// т.к. клиент и сервер на одном компьютере,
// пишем адрес 127.0.0.1
peer.sin_addr.s_addr = inet_addr("127.0.0.1");
SOCKET s = socket(AF_INET, SOCK_DGRAM, 0);
int size = sizeof(peer);
char buf[255], b[255];
std::cout << "Enter string." << std::endl;
std::cin.getline(buf, 100, '\n');
sendto(s, buf, sizeof(buf), 0, (sockaddr *)&peer, size);
if (recvfrom(s, b, sizeof(b), 0, (sockaddr *)&peer, &size) != 0) {
b[strlen(b)] = '\0'; //Удаление ненужных символов
// в конце строки
std::cout << b << std::endl;
std::cin.get();
}
closesocket(s);
WSACleanup();
return 0;

}

Задание 3
Осуществить взаимодействие клиента и сервера на основе протокола TCP/IP. Реализовать параллельное соединение с использованием многопоточности. Функциональные возможности клиента реализовать следующим образом: клиент вводит с клавиатуры строку символов и посылает ее серверу. Признак окончания ввода строки - нажатие клавиши "Ввод". Функциональные возможности сервера реализовать следующим образом: сервер, получив эту строку, должен определить длину введенной строки, и, если эта длина кратна 3, то удаляются все числа, которые делятся на 3. Результаты преобразований этой строки возвращаются назад клиенту.
Нам необходимо написать две программы серверную и клиентскую.
Алгоритм серверной программы совпадает с алгоритмом, описанным в задаче 1. За исключением приема данных с клиента их обработки и отправки назад. Вышеописанная работа произведена в отдельной функции с именем ThreadFunc. Она вызывается в отдельном потоке после установки соединения с клиентом, используя функцию CreateThread.
Алгоритм клиентской программы совпадает с алгоритмом, описанным в задаче 1.
#include<stdio.h>
#include<iostream>
#include<winsock2.h>
#pragma comment(lib,"Ws2_32.lib")

DWORD WINAPI ThreadFunc(LPVOID client_socket) {
SOCKET *s2 = ((SOCKET *)client_socket);
char buf[100];
char buf1[100];
char *testStr = "0369";
// send(s2,"Welcome new client!\n",sizeof("Welcome new client!\n"),0);
while (recv(*s2, buf, sizeof(buf), 0) != 0) {
int k, j = 0;
k = strlen(buf);
if (k % 3 == 0) {
for (int i = 0; i < k; i++) {
if (strchr(testStr, buf[i]) == 0) {
buf1[j++] = buf[i];
}
}
buf1[j] = '\0';
strcpy(buf, buf1);
}
std::cout << buf << std::endl;
send(*s2, buf, strlen(buf)+1, 0);
}
closesocket(*s2);
return 0;
}

int numcl = 0;

void print() {
if (numcl) printf("%d client connected\n", numcl);
else printf("No clients connected\n");
}

void main() {
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD(2, 2);
err = WSAStartup(wVersionRequested, &wsaData);
if (err != 0) { return; }
SOCKET s = socket(AF_INET, SOCK_STREAM, 0);
sockaddr_in local_addr;
local_addr.sin_family = AF_INET;
local_addr.sin_port = htons(1280);
local_addr.sin_addr.s_addr = 0;
bind(s, (sockaddr *)&local_addr, sizeof(local_addr));
int c = listen(s, 5);
std::cout << "Server receive ready" << std::endl;
std::cout << std::endl;
// извлекаем сообщение из очереди
SOCKET client_socket; // сокет для клиента
sockaddr_in client_addr; // адрес клиента(заполняется системой)
int client_addr_size = sizeof(client_addr);
// цикл извлечения запросов на подключение из очереди
while ((client_socket = accept(s, (sockaddr *)&client_addr, &client_addr_size))) {
numcl++;
print();
// Вызов нового потока для обслуживания клиента
CreateThread(NULL, NULL, ThreadFunc, &client_socket, NULL, NULL);
}
}

#include <winsock2.h>
#include <iostream>
#include <stdlib.h>

#pragma comment(lib,"Ws2_32.lib")

int main() {
WORD wVersionRequested;
WSADATA wsaData;
wVersionRequested = MAKEWORD(2, 2);
WSAStartup(wVersionRequested, &wsaData);
struct sockaddr_in peer;
peer.sin_family = AF_INET;
peer.sin_port = htons(1280);
// т.к. клиент и сервер на одном компьютере,
// пишем адрес 127.0.0.1
peer.sin_addr.s_addr = inet_addr("127.0.0.1");
SOCKET s = socket(AF_INET, SOCK_STREAM, 0);
connect(s, (struct sockaddr*) &peer, sizeof(peer));
char buf[255], b[255];
while(1){
std::cout << "Enter string." << std::endl;
std::cin >> buf;
std::cin.get();
send(s, buf, strlen(buf) + 1, 0);
if (recv(s, b, sizeof(b), 0) != 0) {
std::cout << b << std::endl;
std::cin.get();
}
}
shutdown(s, SD_SEND);
WSACleanup();
return 0;

}

Задание 4
Осуществить взаимодействие клиента и сервера без установления логического соединения (UDP). Реализовать параллельное соединение с использованием многопоточности. Функциональные возможности: водится текст и некоторое слово. Вывести только те предложения из текста, которые содержат данное слово.
Нам необходимо написать две программы серверную и клиентскую.
Алгоритм серверной программы совпадает с алгоритмом, описанным в задаче 2. За исключением приема данных с клиента их обработки и отправки назад. Вышеописанная работа произведена в отдельной функции с именем StringAnalizing. Она вызывается в отдельном потоке после создания сокета, используя функцию _beginthread.
Алгоритм клиентской программы совпадает с алгоритмом, описанным в задаче 2.
#include <winsock2.h>
#include <process.h>
#include <iostream>

#pragma comment(lib,"Ws2_32.lib")

void StringAnalizing(void* s) {
char b[210];
sockaddr_in ad;
ad.sin_family = AF_INET;
ad.sin_port = htons(1280);
ad.sin_addr.s_addr = htonl(INADDR_ANY);
int j = sizeof(ad);
bind((SOCKET)s, (LPSOCKADDR)&ad, j);
if (recvfrom((SOCKET)s, b, sizeof(b), 0, (LPSOCKADDR)&ad, &j) != 0) {
std::cout << "f" << std::endl;
char *delimiter = "#$#";
char *text = strtok(b, delimiter);
char *world = strtok(NULL, delimiter);
char *sentence = strtok(text, ".");
char send[210];
send[0] = '\0';
char *s1 = send;

while (sentence != NULL) {
if (strstr(sentence, world)) {
s1 = strcat(s1, sentence);
s1 = strcat(s1, ".\n");
}
sentence = strtok(NULL, ".");
}

int len = strlen(send) + 1;
sendto((SOCKET)s, send, len, 0, (LPSOCKADDR)&ad, j);
}
}

int main() {
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD(2, 2);
err = WSAStartup(wVersionRequested, &wsaData);
if (err != 0) return -1;
SOCKET s = socket(AF_INET, SOCK_DGRAM, 0);
while (true) {
_beginthread(StringAnalizing, 0, (void*)s);
}
// closesocket(s);
WSACleanup();
return 0;
}

#include <winsock2.h>
#include <iostream>

#pragma comment(lib,"Ws2_32.lib")

int main() {
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD(2, 2);
err = WSAStartup(wVersionRequested, &wsaData);
struct sockaddr_in peer;
peer.sin_family = AF_INET;
peer.sin_port = htons(1280);
peer.sin_addr.s_addr = inet_addr("127.0.0.1");
SOCKET s = socket(AF_INET, SOCK_DGRAM, 0);
int t = sizeof(peer);
char text[210];
char world[10];
std::cout << "Enter text" << std::endl;
std::cin.getline(text, sizeof(text), '\n');
std::cout << "Enter world" << std::endl;
std::cin >> world;
std::cin.get();
char *send = strcat(text, "#$#");
send = strcat(send, world);
sendto(s, send, strlen(send) + 1, 0, (LPSOCKADDR)&peer, t);
if (recvfrom(s, text, sizeof(text), 0, (LPSOCKADDR)&peer, &t) != 0) {
std::cout << text << std::endl;
std::cin.get();
}
closesocket(s);
WSACleanup();
return 0;
}



Задание 5 (Лабораторная работа №8, вариант 1)
Реализовать простейший почтовый сервер и протокол взаимодействия с ним. Предусмотреть команды авторизации пользователя и отправки писем.
Нам необходимо написать две программы серверную и клиентскую.
Для разработки сервера сначала необходимо решить, какая структура данных будет играть роль Email-центра. Очевидно, это будет файловая структура данных. Для представления файла удобно использовать класс CFile из библиотеки классов MFC. Для этого необходимо подключить модуль "afx.h", а также выбрать опцию Using MFC in a shared DLL (Alt+F7, вкладка General).
В серверной программе инициализируем WinSock API, используя функцию WSAStartup. Создаем сокет, использующий протокол TCP, при помощи функции socket. Устанавливаем сокету адрес и порт, используя функцию bind. Далее ожидаем установки соединения с клиентом, для чего используем функцию listen. После прихода с клиента предложения о соединении, принимаем его, используя функцию accept. И начинаем принимать данные с клиента, используя функцию recv. Принятые данные обрабатываем, исходя из условия задачи, и отсылаем результат обработки, используя функцию send. В конце программы закрываем сокет, при помощи функции closesocket, и прекращаем работу WinSock API, используя функцию WSACleanup.
В клиентской программе инициализируем WinSock API, используя функцию WSAStartup. Создаем сокет, использующий протокол TCP, при помощи функции socket. Устанавливаем соединение с сервером, используя функцию connect. Считываем данные с потока входа, при помощи функции std::cin.getline, и отсылаем их на сервер, используя функцию send. Получаем результат с сервера, используя функцию recv, и выводим его на экран, посредством функции std::cout. В конце программы закрываем сокет, при помощи функции closesocket, и прекращаем работу WinSock API, используя функцию WSACleanup.
// server.cpp: определяет точку входа для консольного приложения.
#include "stdafx.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif

//#define _AFXDLL
#include <iostream>
#include "afx.h"
#include <winsock2.h>
#include <process.h> /* _beginthread, _endthread */
#include <string.h>
#include <time.h>
#include "atlstr.h"
#include <windows.h>
#include <vector>
#include <math.h>

using namespace std;
CFile f;
CFileException ex;
int getInbox(const char *searchkey, vector<wstring> &list){

WIN32_FIND_DATA fd;
CString tmpSearchKey(searchkey);
HANDLE h = FindFirstFile(tmpSearchKey, &fd);

if (h == INVALID_HANDLE_VALUE)
{
return 0; // no files found
}

while (1)
{
std::wstring tmpFileName = fd.cFileName;
list.push_back(tmpFileName);

if (FindNextFile(h, &fd) == FALSE)
break;
}
return list.size();
}
int registerUser(char* user, char* password) {
string dirNameStr(user);
bool t = CreateDirectoryA(dirNameStr.c_str(), NULL);
if (ERROR_ALREADY_EXISTS == GetLastError()){
return 0;
}
string inboxDir(dirNameStr + "\\inbox");
bool t1 = CreateDirectoryA(inboxDir.c_str(), NULL);
string passFileStr(dirNameStr + "\\password");
TCHAR *passFile = new TCHAR[passFileStr.size() + 1]; // преобразование типа string в tchar
passFile[passFileStr.size()] = 0;
std::copy(passFileStr.begin(), passFileStr.end(), passFile); // непосредственно преобразование
if (!f.Open(passFile, CFile::modeWrite | CFile::modeCreate, &ex)) {
cerr << "Cannot create password file. Try again\n";
exit(EXIT_FAILURE);
}
f.Write(password, strlen(password));
f.Close();
return 1;
}
bool dirExists(const string& dirName_in)
{
DWORD ftyp = GetFileAttributesA(dirName_in.c_str());
if (ftyp == INVALID_FILE_ATTRIBUTES)
return false; //something is wrong with your path!

if (ftyp & FILE_ATTRIBUTE_DIRECTORY)
return true; // this is a directory!

return false; // this is not a directory!
}
int loginUser(char* user, char* password) {
string dirNameStr(user);
if (!dirExists(dirNameStr)){
return 0;
}
string passFileStr(dirNameStr + "\\password");
TCHAR *passFile = new TCHAR[passFileStr.size() + 1]; // преобразование типа string в tchar
passFile[passFileStr.size()] = 0;
std::copy(passFileStr.begin(), passFileStr.end(), passFile); // непосредственно преобразование
if (!f.Open(passFile, CFile::modeRead, &ex)) {
cerr << "Cannot create password file. Try again\n";
exit(EXIT_FAILURE);
}
char* oldPass = new char[20];
f.Read(oldPass, strlen(password));
f.Close();
oldPass[strlen(password)] = '\0';
if (!strcmp(password, oldPass)){
return 2;
}
return 1;
}
void EmailProcess(void* newS) {
int c;
char p[200], com[200], num[4];
char* curU;
com[0] = '\0'; p[0] = '\0';
strcat(p, "EMail center connected...\n");
send((SOCKET)newS, p, sizeof(p), 0);
while ((c = recv((SOCKET)newS, p, sizeof(p), 0) != 0)) {
int i = 0;
while (p[i] != ' ') {
com[i] = p[i];
i++;
};
com[i] = '\0'; i++;
if (!strcmp(com, "register") || !strcmp(com, "login")) {
char user[200], password[200];
char* message;
int j = 0;
for (; p[i] != ' '; i++) {
user[j] = p[i];
j++;
}
user[j] = '\0';
i++; j = 0;
for (; p[i]; i++) {
password[j] = p[i];
j++;
}
password[j] = '\0';
if (!strcmp(com, "register")){
int result = registerUser(user, password);
switch (result){
case 0:
message = "Such user doesn't exist";
break;
case 1:
message = "Registration complete";
cout << "User " << user << " register" << endl;
curU = user;
break;
}
}
if (!strcmp(com, "login")){
int result = loginUser(user, password);
switch (result){
case 0:
message = "Incorrect login";
break;
case 1:
message = "Incorrect password";
break;
case 2:
message = "Login success";
curU = user;
cout << "User " << user << " login" << endl;
break;
}
}
send((SOCKET)newS, message + '\0', strlen(message) + 1, 0);
}
if (!strcmp(com, "inbox")) {
vector<wstring> list;
char* result = new char[17];
TCHAR* number = new TCHAR[4];
wstring emails = _T("Your inbox: \n");
char* templateAddr = new char[strlen(curU)];
memcpy(templateAddr, curU, strlen(curU));
templateAddr[strlen(curU)] = '\0';
strcat(templateAddr, "\\inbox\\*.txt");
int count = getInbox(templateAddr, list);
for (int i = 0; i < count; i++){
_itow(i + 1, number, 10);
emails = emails + number + _T(". ") + list[i].c_str();
emails += '\n';
}

CharToOem(emails.c_str(), result);
send((SOCKET)newS, result + '\0', strlen(result) + 1, 0);
}
if (!strcmp(com, "read")) {
vector<wstring> list;
char* result;
char* templateAddr = new char[strlen(curU)];
memcpy(templateAddr, curU, strlen(curU));
templateAddr[strlen(curU)] = '\0';
strcat(templateAddr, "\\inbox\\*.txt");
int count = getInbox(templateAddr, list);
int j = 0;
while (p[i] != '\0') {
num[j] = p[i];
i++;
j++;
};
int readEmail = atoi(num);

if (readEmail <= count){
char inboxDirAddrF[200];
char* inboxDirAddr = new char[strlen(curU)];
memcpy(inboxDirAddr, curU, strlen(curU));
inboxDirAddr[strlen(curU)] = '\0';
strcat(inboxDirAddr, "\\inbox\\");
std::wstring tmpp = list[readEmail - 1].c_str();

char restmp[200];
CharToOem(tmpp.c_str(), restmp);
strcat(inboxDirAddr, restmp);
CString tmpp1;
tmpp1 = inboxDirAddr;

if (f.Open(tmpp1, CFile::modeRead)){
long iFileSiz = f.GetLength();
result = new char[iFileSiz];

f.Read(result, iFileSiz);
result[iFileSiz] = '\0';
cout << result << ". Email successfully deleted" << endl;
f.Close();
}
}
else{
result = "Incorrect number";
}
send((SOCKET)newS, result + '\0', strlen(result) + 1, 0);
}

//send
if (!strcmp(com, "send")) {
char* result;

char templateAddrF[200];
char user[200];
char* message;
int j = 0;
for (; p[i] != ' '; i++) {
user[j] = p[i];
j++;
}
user[j] = '\0';
i++; j = 0;
message = &p[i];

vector<wstring> list;
char* templateAddr = new char[strlen(user)];
memcpy(templateAddr, user, strlen(user));
templateAddr[strlen(user)] = '\0';
strcat(templateAddr, "\\inbox\\");
strcat(templateAddr, curU);
strcpy(templateAddrF, templateAddr);
strcat(templateAddrF, "*.txt");

int count = getInbox(templateAddrF, list);

char* number = new char[4];
itoa(count + 1, number, 10);
strcat(templateAddr, number);
strcat(templateAddr, ".txt");
delete[]number;

CString tmpp1;
tmpp1 = templateAddr;

if (f.Open(tmpp1, CFile::modeWrite | CFile::modeCreate)){

f.Write(message, strlen(message));
result = message;
cout << result << ". Email successfully send" << endl;
f.Close();
}
else{
result = "Incorrect number";
}
send((SOCKET)newS, result + '\0', strlen(result) + 1, 0);
}

if (!strcmp(com, "quit")) {
closesocket((SOCKET)newS);
exit(EXIT_SUCCESS);
com[0] = '\0';
}
}
}

int main() {
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD(2, 2);
err = WSAStartup(wVersionRequested, &wsaData);
if (err != 0) return -1;

sockaddr_in local;
local.sin_family = AF_INET;
local.sin_port = htons(1280);
local.sin_addr.s_addr = htonl(INADDR_ANY);
SOCKET s = socket(AF_INET, SOCK_STREAM, 0);

int c = bind(s, (struct sockaddr*)&local, sizeof(local));
int r = listen(s, 5);

while (true) {
sockaddr_in remote;
int j = sizeof(remote);
SOCKET newS = accept(s, (struct sockaddr*) &remote, &j);

_beginthread(EmailProcess, 0, (void*)newS);
}
WSACleanup();
return 0;
}
// client.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "client.h"
#include <winsock2.h>
#include <iostream>
#ifdef _DEBUG
#define new DEBUG_NEW
#endif

using namespace std;

int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{

WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD(2,2);
err = WSAStartup(wVersionRequested, &wsaData);
//определение ошибки запуска WinAPI , завершение работы
if(err != 0) return -1;
//структура адреса
struct sockaddr_in peer;
peer.sin_family=AF_INET;
peer.sin_port=htons(1280);
peer.sin_addr.s_addr=inet_addr("10.178.30.235");
//открытие сокета
SOCKET s=socket(AF_INET,SOCK_STREAM,0);
//соединение с сокетом
connect(s,(struct sockaddr*) &peer,sizeof(peer));
char b[200];

//получение данных от сервера
recv(s,b,sizeof(b),0);

//вывод результата - в данном случае подсоединен ли клиент
cout<<b;
b[0]='\0';

//завершение работы по слову quit
while (strcmp(b,"quit"))
{
char temp_1 [200];
cin.getline(b,200,'\n');
send(s,b,sizeof(b),0);


recv(s,temp_1, sizeof(temp_1),0);
cout<<temp_1<<endl;

}

WSACleanup();
return 0;
}
Категория: Другое | Добавил: lanka
Просмотров: 250 | Загрузок: 4
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]