Форум программистов, компьютерный форум, киберфорум
C++: Сети
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/9: Рейтинг темы: голосов - 9, средняя оценка - 4.67
76 / 50 / 26
Регистрация: 22.02.2015
Сообщений: 306
1

Как отдать "приказ" на другой компьютер

22.02.2015, 21:23. Показов 1883. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Как отдать команду другому компьютеру, который подключен на мой сервер.И допустим сервер игры и конечно же у меня есть его исходный код. Какой код мне нужно вклеивать для посылки например
C++
1
CreateDirectory("C:\\mydir", NULL);
клиенту.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.02.2015, 21:23
Ответы с готовыми решениями:

Отдать 404 код в ответ и отдать содержимое статичного файла
Как правильно выставить правило в конфигурационном файле nginx(сайта). Если url не содержит...

Как подключить компьютер к сети через другой компьютер по витой паре?
доброе время суток. столкнулся с такой проблемой. есть сеть wi-fi. все работает отлично. теперь...

Если робот заходит по протоколу https то отдать ему другой файл
Всем привет, столкнулся с проблемой, сайт на ASP , до этого в основном были на ПХП, и так о...

Как перенести БД на другой компьютер
Какие файлы необходимы для развертывания объектов БД? Где их найти и как их потом развернуть,т.е....

Как вычисления переложить на другой компьютер?
Например можно как-то запустить Visual Studio в VirtualBox и подключаться к ней по сети? Для...

5
Ушел с форума
Эксперт С++
16473 / 7436 / 1187
Регистрация: 02.05.2013
Сообщений: 11,617
Записей в блоге: 1
23.02.2015, 09:44 2
Сетевые протоколы "не умеют" выполнять приказы, они предназначены
только для передачи данных. Так что вам самим придется реализовать
прием команд и их выполнение на клиентской стороне.
0
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
23.02.2015, 09:55 3
Протоколы и не должны что то выполнять, это только "языки" для межмашинного диалога. Выполнять полученное - задача софта.
0
4 / 4 / 1
Регистрация: 22.02.2015
Сообщений: 17
23.02.2015, 14:03 4
Основа приёма команд гнездо UDP, чтобы ни озадачивать процесс игры.
Чтобы ни любой Человек мог управлять, шифруем вход (пароль)
Далее - обработка команд.
( сегодня я выпиваю, двадцать третье... , позже - выложу демо-проект ( не знаю сколько выпивать буду )
Одним словом в процессе.
0
4 / 4 / 1
Регистрация: 22.02.2015
Сообщений: 17
06.03.2015, 10:40 5
"Cyberforum" не разрешает опубликовать ( говорит: сократите число символов )...
- ни вопрос ( просто таким образом сложно разобраться ). Смотрите в пакете.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
////////////////////////////////////////////////////////////////////////////////
// Class "CUDPServer".
 
CUDPServer::CUDPServer( unsigned long ulAddress, int nPort, char* svPassword, HWND hwnd )
{
    Address     = ulAddress;
    Port        = nPort;
    lstrcpynA( Password, svPassword, PASSWORDLEN + 1 );
 
    *Error      = 0;
    ThreadId    = 1;
    Seedrand    = 1;
    hWnd        = hwnd;
    
    HANDLE hThread = CreateThread( NULL, 0, ServerThreadEntry, this, 0, &ThreadId );
    if( hThread == NULL )
        lstrcpy( Error, TEXT( "-->FAILED: Could not create thread.\nYour system may be misbehaving." ) );
 
    CloseHandle( hThread );
}
 
unsigned int CUDPServer::DoSeed()
{
    int x, y;
    unsigned int z;
 
    y = lstrlenA( Password );
    if( !y )
        return Port;
    else
    {
        z = 0;
        for( x = 0; x < y; ++x )
            z += Password[x];
 
        for( x = 0; x < y; ++x )
        {
            if( x%2 )
                z -= Password[x] * ( y - x + 1 );
            else
                z += Password[x] * ( y - x + 1 );
            z = z%RAND_MAX;
        }
        z = ( z * y )%RAND_MAX;
        return z;
    }
}
 
void CUDPServer::BuildPacket(char* Buffer, int len)
{
    if( !len ) return;
 
    Seed( DoSeed() );
 
    int j;
    for( j = 0; j < len; ++j )
        Buffer[j] = Buffer[j] ^ ( Rand()%256 );
}
 
////////////////////////////////////////////////////////////////////////////////
// Send - отправляет данные клиенту.
 
void CUDPServer::Send(SOCKET Socket, sockaddr_in ToAddr, char* Password, char* Data, unsigned char Type)
{
    int len = lstrlenA( Data );
 
    unsigned long size;
    size = PASSWORDLEN + ( sizeof(long) * 2 ) + 3 + len;
 
    char Buffer[BUFFSIZE];
    lstrcpyA( Buffer, Password );
    
    unsigned long* pdw;
    pdw     = (unsigned long*)( Buffer + PASSWORDLEN );
    *pdw    ++= __GOLTZ( size );
 
    unsigned long packet = 0;
    *pdw    ++= __GOLTZ( packet );
    ++packet;
 
    char*   ptr;
    ptr     = (char*)pdw;
    *ptr    ++= Type;           // Флаг пакета.
    lstrcpyA( ptr, Data );
    ptr     += len + 1;
 
    /* Сборка пакета. */
    BuildPacket( Buffer, (int)size );
 
    /* Отправка пакета. */
    sendto( Socket, Buffer, size, 0, (struct sockaddr*)&ToAddr, sizeof(ToAddr) );
}
 
////////////////////////////////////////////////////////////////////////////////
// SendMsg - Отправка информации в контрол управления Edit ( IDC_SERVERRESPONSE )
 
void CUDPServer::SendMsg( char* svText )
{
    if( hWnd )
        PostMessageA( hWnd, WM_UDPSERVER_MESSAGE, (WPARAM)0, (LPARAM)svText );
    Sleep( DELAY_SERVER_RESPONSE );
}
 
///////////////////////////////////////////////////////////////////////////////
// ServerThreadEntry
 
DWORD STDCALL ServerThreadEntry( void* Arg )
{
    CUDPServer* Info = (CUDPServer*)Arg;
 
    unsigned long   Address = Info->Address;
    int             InPort  = Info->Port;
    char            Password[PASSWORDLEN + 1];
    lstrcpynA( Password, Info->Password, PASSWORDLEN + 1 );
 
    SOCKET UDPSocket = socket( AF_INET, SOCK_DGRAM, 0 );
    if( UDPSocket == INVALID_SOCKET )
    {
        lstrcpy( Info->Error, TEXT( "-->FAILED: Create Socket" ) );
        return 1;
    }
 
    struct sockaddr_in Addr;
    memset(&Addr,0,sizeof(Addr));
    int AddrSize=sizeof(Addr);
 
    Addr.sin_addr.S_un.S_addr   = Address;
    Addr.sin_family             = AF_INET;
    Addr.sin_port               = htons( (WORD)InPort );
 
    if( bind(UDPSocket,(struct sockaddr*)&Addr,sizeof(Addr))==SOCKET_ERROR )
    {
        closesocket( UDPSocket );
        lstrcpy( Info->Error ,TEXT( "-->FAILED: Bind Socket" ) );
        return 1;
    }
    
    u_long Mode = 1;/* Блокирующий режим выключен. */
    if( ioctlsocket( UDPSocket,FIONBIO,&Mode ) != 0 )
    {
        closesocket( UDPSocket );
        lstrcpy( Info->Error, TEXT( "-->FAILED: ioctlsocket" ) );
        return 1;
    }
 
    MSG msg;
    BOOL bDone = FALSE;
 
    Info->SendMsg( "Сервер работает." );
 
    while( !bDone )
    {
        Sleep(20);
        /* Должны ли завершить работу... */
        if( PeekMessage( &msg, (HWND)-1, 0, 0, PM_REMOVE ) ) {
            /* Это сообщение о завершении ? */
            if( msg.message == WM_UDPSERVER_DESTROY ) {
                bDone = TRUE;/* Да, выход из цикла. */
                Info->SendMsg( "Подготовка к выходу..." );
            }
        }
 
        char Buffer[BUFFSIZE];
        int Count = recvfrom( UDPSocket,Buffer,BUFFSIZE,0,(struct sockaddr*)&Addr,&AddrSize );
        if( Count == SOCKET_ERROR )
            continue;
 
        /* Пакет принят, идентифицировать, */
        Buffer[Count] = '\0';
        Info->BuildPacket( Buffer, Count );
        /* проверить подпись пользователя. */
        if( !memcmp( Password, Buffer, PASSWORDLEN ) )
        {
            /* Пользователь установлен, обработка команд. */
            Info->BreakDownCommand( UDPSocket, Addr, Password, Buffer );
        }
    }
 
    /* Закрыть гнездо, выйти. */
    closesocket( UDPSocket );
    Info->ThreadId = 0;
    Info->SendMsg( "Сервер остановлен." );
    return 0;/* Удачное завершение. */
}
---
------- и попробую выложить часть клиента...
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
int main( int argc, char* argv[] )
{
    setconsole();
 
    InitSockets();
 
    GServerAddr     = 0;
    GServerPort     = 2015;
    lstrcpyA( GPassword, "You_Pass" );
 
    int LocalPort   = 0;
    GLocalAddr      = GetAddr( appComputerName() );
 
    int x;
    for( x = 1; x < argc; ++x )
    {
        if( argv[x][0] == '/' )
        {
            if( lstrcmpiA( argv[x], "/PORT" ) == 0 )
            {
                if( x > argc - 2 )
                {
                    printf( "Missing argument for /PORT\n" );
                    Usage();
                    return 0;
                }
                ++x;
                GServerPort = atoi( argv[x] );
            }
 
            else if( lstrcmpiA( argv[x], "/ADDRESS" ) == 0 )
            {
                if( x > argc - 2 )
                {
                    printf( "Missing argument for /ADDRESS\n" );
                    Usage();
                    return 0;
                }
                ++x;
                GServerAddr = GetAddr( argv[x] );
            }
 
            else if( lstrcmpiA( argv[x], "/PASSWORD" ) == 0 )
            {
                if( x > argc - 2 )
                {
                    printf( "Missing argument for /PASSWORD\n" );
                    Usage();
                    return 0;
                }
                ++x;
                lstrcpyA( GPassword, argv[x] );
                if( lstrlenA( GPassword ) > PASSWORDLEN )
                {
                    /* Пароль длинный, будет использоваться по умолчанию. */
                    printf( "The password is too large. Use by default.\n" );
                    lstrcpyA( GPassword, "You_Pass" );
                }
            }
 
            else if ( lstrcmpiA( argv[x], "/LOCALIP") == 0)
            {
                if( x > argc - 2 )
                {
                    printf( "Missing argument for /LOCALIP\n" );
                    Usage();
                    return 0;
                }
                ++x;
                GLocalAddr = GetAddr( argv[x] );
            }
 
            else if( lstrcmpiA( argv[x], "/LOCALPORT" ) == 0 )
            {
                if( x > argc - 2 )
                {
                    printf( "Missing argument for /LOCALPORT\n" );
                    Usage();
                    return 0;
                }
                ++x;
                LocalPort = atoi( argv[x] );
            }
            
            else if ( lstrcmpiA( argv[x], "/EXAMPLES") == 0)
            {
                Examples();
                return 0;
            }
                        
            else
            {
                printf( "Bad option: \"%s\"\n", argv[x] );
                Usage();
                return 0;
            }
        }
        else
        { 
            printf( "Bad argument: \"%s\"\n", argv[x] );
            Usage();
            return 0;
        }
    } 
 
    SOCKET Socket = socket( PF_INET, SOCK_DGRAM, 0 );
    if( Socket == INVALID_SOCKET )
    {
        printf( "-->FAILED: socket\n" );
        return 1;
    }
 
    struct sockaddr_in boundaddr;
    memset(&boundaddr,0,sizeof(boundaddr));
    boundaddr.sin_family        = AF_INET;
    boundaddr.sin_addr.s_addr   = GLocalAddr;
    boundaddr.sin_port          = htons( (WORD)LocalPort );
 
    if(( bind( Socket, (struct sockaddr*)&boundaddr, sizeof(boundaddr))) == SOCKET_ERROR )
    {
        printf( "-->FAILED: bind port\n" );
        closesocket( Socket );
        return 1;
    }
 
    /* Установка определённых опций гнезда. */
    if( SetSocketLinger( Socket ) != 0 )
    {
        printf( "-->FAILED: setsockopt\n" );
        closesocket( Socket );
        return 1;
    }
    
    /* Узнать номер локального порта. */
    SOCKLEN size = sizeof(boundaddr);
    getsockname ( Socket, (sockaddr*)(&boundaddr), &size);
    int port = ntohs( boundaddr.sin_port );
 
    printf( "Bound to local address: %s, port: %d\n", ResolveAddr( GLocalAddr ), port );
    printf( "UDPClient v1.0 -:|:- New Hack City\n" );
    printf( " (Type 'help' for assistance)\n" );
 
    char Buffer[BUFFSIZE];
    char svCmd[COMMANDSIZE];
 
    lstrcpyA( GRemoteDir, "c:\\" );
 
    while( !feof( stdin ) )
    {
        if( GServerAddr == 0 )
            printf( "OX>" );
        else
            printf( "OX:%s>", ResolveAddr( GServerAddr ) );
        
        char svArg[ARGSIZE];
        char svArg2[ARGSIZE];
 
        svArg[0] = svArg2[0] = 0;
        memset( Buffer, 0, lstrlenA(Buffer) );
        fgets( Buffer, 1024, stdin );
        
        if( Buffer[lstrlenA( Buffer ) - 1] == '\n' )
            Buffer[lstrlenA( Buffer ) - 1] = '\0';
        
        char* c = Strchr( svCmd, Buffer );
        while( isspace( (int)c[0]) )
            ++c;
        
        c = Strchr( svArg, c );
        while( isspace( (int)c[0]) )
            ++c;
        
        c = Strchr( svArg2, c );
        if( exec( Socket, svCmd, svArg, svArg2 ) )
            printf( "Command Failed\n" );
    }
    return 0;
}
UDP Server - Client:
Миниатюры
Как отдать "приказ" на другой компьютер  
Вложения
Тип файла: zip udp_srv_cli.zip (66.6 Кб, 30 просмотров)
1
4 / 4 / 1
Регистрация: 22.02.2015
Сообщений: 17
06.03.2015, 13:52 6
Если честно: ерунда получилась - в плане оформления ( Человек ни поймёт ) - это Первое.
Второе ( я через некоторое время, попробую разместить Здесь ссылку на видео ( youtube ),
как момент использования.

Добавлено через 7 минут
Cyberforum ( странные Вы ребята... ) ( ведь видно, что ни лох пытается развести..., почему система - хромает ? )

Добавлено через 1 час 21 минуту


Добавлено через 25 минут
__Подчёркиваю__ если, что то ни понятно - НИ Стесняйтесь...
--- "печатайте ВАШ вопрос ", когда увижу - обязательно Отвечу!
Наслаждайтесь ( также, не забывайте, можно сесть в тюрьму з а эту программу ).
1
06.03.2015, 13:52
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.03.2015, 13:52
Помогаю со студенческими работами здесь

Как перенести приложение на другой компьютер?
У меня есть приложение в Visual Studio с базой данных MSsql, как мне перенести это приложение на...

Как отправить сообщение на другой компьютер?
Всем привет!Ребята подскажите,а то забыл,как отправить сообщение на другой компьютер:)Забыл!...

Как перенести xCode project на другой компьютер?
Здравствуйте, возник еще один вопрос. Как перенести xCode project с одного компьютера ( Mac OS ),...

Как выйти в интернет через другой компьютер?
Привет! Я не уверен, что правильно выбрал раздел, поэтому если не правильно, переместите,...

Как перенести программу с awesomium на другой компьютер
Я создал программу, к которой подключен браузерный движок awesomium. В проект добавлены 3 ссылки:...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru