inta;= socket(AF_INET, SOCK_STREAM, 0); // создать гнездо
if(MySocket == INVALID_SOCKET)
{ // в случае неудачи - выдать сообщение и выйти
// cout<<endl<<"socket( .) error "<<WSAGetLastError()<<endl;0;
}.sin_family = AF_INET; // заполнение структуры
данных.sin_port = htons(port);.sin_addr.s_addr = htonl(INADDR_ANY);(bind(MySocket, (sockaddr*) &MySocketAdress,(MySocketAdress)) == SOCKET_ERROR) // получение локального
адреса
{ // в случае неудачи - выдать сообщение, закрыть гнездо и выйти
// cout<<endl<<"bind( .) error "<<WSAGetLastError()<<endl;(MySocket);0;
}(listen(MySocket, 5) == SOCKET_ERROR) // перевести гнездо в с
остояние ожидания
{
// cout<<endl<<"listen( .) error "<<WSAGetLastError()<<endl;(MySocket);0;
}(1) {= sizeof(sockaddr_in);= accept(MySocket, (sockaddr*)&MySocketAdress, &a); //
принять соединение(newSocket == INVALID_SOCKET)
{
//cout<<endl<<"accept( .) error "<<WSAGetLastError()<<endl;(MySocket);0;
}
/*= sizeof(sockaddr_in);(getpeername(sw, (sockaddr*)&MySocketAdress, &a) !=
SOCKET_ERROR)
// попытаться получить адрес клиента
cout<<"accepted connection from "<<inet_ntoa(sa.sin_addr)<<endl;
*/
// запустить в отдельной нити функцию обслуживания клиента
if(!AfxBeginThread(ConnectHandler, (void*) newSocket))
{
//cout<<endl<<"_beginthread( .) error "<<errno<<endl;(MySocket);0;
}
}(MySocket);0;
}ConnectHandler( LPVOID pParam)
{s = (SOCKET) pParam;// гнездо, с которым будет вестись
обменbuf[500], // буферы для данных[500], // буфер для шифрованного текста
pwd[21]; // пароль
char len[4];str;n, nFields;(pwd, password.operator LPCTSTR(), 20);
recv(s, len, sizeof len, 0); // прием данных от клиента= recv(s, encrypted, (int) len, 0); // прием данных от клиента
crypt(encrypted, buf, pwd, n);(n < 1) {(s); // закрытие гнезда0;
}{(IsBusy);= true;LipField;= pLipRec->Open(AFX_DB_USE_DEFAULT_TYPE, buf);= pLipRec->GetODBCFieldCount();(n != 0 || nFields > 0) {(s, (char*)&nFields, sizeof nFields, 0);(int i = 0; i < nFields; i++) {>GetODBCFieldInfo(i, LipField);= crypt(LipField.m_strName.operator LPCTSTR(),, pwd, LipField.m_strName.GetLength() + 1);(s, (char*)&n, sizeof n, 0);(s, encrypted, n, 0);
}>MoveFirst();(!pLipRec->IsEOF())
{(int i = 0; i < nFields; i++)
{>GetFieldValue(i, str);= crypt(str, encrypted, pwd, str.GetLength() + 1);(s, (char*)&n, sizeof n, 0);(s, encrypted, n, 0);
}>MoveNext( );(!pLipRec->IsEOF())[0] = 1;[0] = 0;(s, len, 1, 0);
}>Close();
}{= 0;(s, (char*)&nFields, sizeof nFields, 0);
}= false;(s, len, sizeof len, 0); // прием данных от клиента= recv(s, encrypted, (int) len, 0); // прием данных от клиента(encrypted, buf, pwd, n);
} while (n > 0);(s); // закрытие гнезда0;
}
#include "stdafx.h"
#include "crypt.h"
#include <string.h>
// функция преобразования строки пароля в гамму шифра
unsigned long gamma(char *pwd)
{buf[20];i;long flag;unsigned long g;(pwd) {(buf, 0x55, 20);// UUUUUUUUUUUUUUUUUUUU(buf, pwd, strlen(pwd));// passwordUUUUUUUUUUUU(i = 0, g = 0; i < 20; i++)// свертка пароля+= (unsigned long) (buf[i] << (i % 23));
}(i = 5; i > 0; i--) { // циклический сдвиг на 5 разрядов вправо
flag = g & 1;= g >> 1;(flag)
g |= 0x80000000;
}g; // возвратить значение гаммы
}
// шифрует открытый текст source по паролю pwd
// и записывает шифрованный текст в dest
// шифрование симметричноеcrypt(const char *source, char *dest, char *pwd, int len)
{, nBlocs;long *pSrc, *pDst, g;= (unsigned long *) source;= (unsigned long *) dest;
g = gamma(pwd);// получить гамму шифра= (len + 1) / 4 + 1; // сосчитать число 32-разрядных блоков
Самое читаемое:
Дискретный регулятор мощности секционированной солнечной батареи
Система электропитания (СЭП) является одной из важнейших частей в составе
оборудования спутника, обеспечивая энергией все его служебные системы и
полезную нагрузку КА. Важнейшими характеристиками СЭП являются качество
выходного напряжения, масса, габариты, КПД, надежность и стоимость.
Одним из способов достижения тр ...