Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.54/123: Рейтинг темы: голосов - 123, средняя оценка - 4.54
 Аватар для Maikl Til
12 / 12 / 1
Регистрация: 19.03.2010
Сообщений: 71

TCPClient && TCPServer Indy Components

24.06.2010, 22:54. Показов 25977. Ответов 51
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет.

Программа пишется в C++ Builder 2010.

Написал Серверную часть чата и Клиентскую часть чата. Естественно не все, что хотелось бы ^_^


Схема идеи:

Client 1-3 Посылают сообщения, которые попадают на сервер. После того как сервер получил сообщение, он записывает сообщение в лог и рассылает его всем Client'aм и тому кто его послал. Вот в принципе и вся идея. Помогите разобраться с этим

Проблема этих программ:
1) При отправке сообщения на сервер используя кириллические символы, сервер отображает символы кириллицы как : "?????????????".


Исходник: Client && Server.rar

Unit1.cpp
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
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
 
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "IdBaseComponent"
#pragma link "IdComponent"
#pragma link "IdContext"
#pragma link "IdCustomTCPServer"
#pragma link "IdTCPServer"
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
    LBT->Caption = "Сервер Отключен";
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
   int con = StrToInt(EConnect->Text);
    ChatServer->Active = false;
    ChatServer->Active = true;
    ChatServer->MaxConnections = con;
    Memo1->Lines->Add("Была нажата кнопка \"Refresh Server\"");
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
    if (ChatServer->Active) {
    LBT->Caption = "Сервер Активен";
 }
 else {
     LBT->Caption = "Сервер Отключен";
 }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ChatServerExecute(TIdContext *AContext)
{
   int length = AContext->Connection->Socket->ReadLongInt();
   UnicodeString Message = AContext->Connection->Socket->ReadString(length);
   AContext->Connection->Disconnect();
   Memo1->Lines->Add(Message);
   LMessage->Items->Add(Message);
}
//---------------------------------------------------------------------------
Unit1.h

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
//---------------------------------------------------------------------------
 
#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include "IdBaseComponent.hpp"
#include "IdComponent.hpp"
#include "IdContext.hpp"
#include "IdCustomTCPServer.hpp"
#include "IdTCPServer.hpp"
#include <ExtCtrls.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:    // IDE-managed Components
    TIdTCPServer *ChatServer;
    TButton *Button1;
    TEdit *EConnect;
    TLabel *Label1;
    TLabel *LBT;
    TTimer *Timer1;
    TMemo *Memo1;
    TListBox *LMessage;
    void __fastcall Button1Click(TObject *Sender);
    void __fastcall Timer1Timer(TObject *Sender);
    void __fastcall ChatServerExecute(TIdContext *AContext);
private:    // User declarations
public:     // User declarations
    __fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif


Клиентская часть.

Unit3.cpp

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
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
 
#include "Unit3.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "IdBaseComponent"
#pragma link "IdComponent"
#pragma link "IdTCPClient"
#pragma link "IdTCPConnection"
#pragma link "IdContext"
#pragma link "IdCustomTCPServer"
#pragma link "IdTCPServer"
#pragma resource "*.dfm"
TForm3 *Form3;
//---------------------------------------------------------------------------
__fastcall TForm3::TForm3(TComponent* Owner)
    : TForm(Owner)
{
 
  EHost->Enabled = false;
  EPort->Enabled = false;
  CheckBox1->Caption = "Ввести параметры";
}
//---------------------------------------------------------------------------
void __fastcall TForm3::CheckBox1Click(TObject *Sender)
{
if (CheckBox1->Checked) {
    EHost->Enabled = true;
    EPort->Enabled = true;
    EHost->Text = "";
    EPort->Text = "";
    CheckBox1->Caption = "Вернуть настройки";
}  else {
    EHost->Enabled = false;
    EPort->Enabled = false;
    EHost->Text = "192.168.0.102";
    EPort->Text = "6666";
    CheckBox1->Caption = "Ввести параметры";
}
}
//---------------------------------------------------------------------------
void __fastcall TForm3::Button1Click(TObject *Sender)
{
 
    ChatClient->Host = EHost->Text; // имя хоста
    ChatClient->Port = 6666;  // номер порта
    ChatClient->Connect();
 
    ChatClient->Socket->Write(EMessage->Text.Length());
    ChatClient->Socket->Write(EMessage->Text);
    ChatClient->Disconnect(); // прерываем соединение
}
//---------------------------------------------------------------------------
Unit3.h

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
//---------------------------------------------------------------------------
 
#ifndef Unit3H
#define Unit3H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include "IdBaseComponent.hpp"
#include "IdComponent.hpp"
#include "IdTCPClient.hpp"
#include "IdTCPConnection.hpp"
#include "IdContext.hpp"
#include "IdCustomTCPServer.hpp"
#include "IdTCPServer.hpp"
//---------------------------------------------------------------------------
class TForm3 : public TForm
{
__published:    // IDE-managed Components
    TEdit *EHost;
    TEdit *EPort;
    TGroupBox *GroupBox1;
    TListBox *LMessage;
    TEdit *EMessage;
    TButton *Button1;
    TGroupBox *GroupBox2;
    TCheckBox *CheckBox1;
    TIdTCPClient *ChatClient;
    void __fastcall CheckBox1Click(TObject *Sender);
    void __fastcall Button1Click(TObject *Sender);
private:    // User declarations
public:     // User declarations
    __fastcall TForm3(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm3 *Form3;
//---------------------------------------------------------------------------
#endif
1
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
24.06.2010, 22:54
Ответы с готовыми решениями:

Это что за иероглифы? if(!((a-4)&~7)&&!!(a-4))
Случайно наткнулся, выражение if(a&gt;=5 &amp; a&lt;=11) &quot;проще&quot; записывается так: if(!((a-4)&amp;~7)&amp;&amp;!!(a-4)) Фигасе проще, что они...

TCPServer и TCPClient
Помогите мне пожалуста разобратся с этими двумя компонентами. Я хочу сделать интернет чат.

Синхронизация TCPClient и TCPServer
Я работаю с C++Builder2006, если кто знает помогите разобраться: Клиент посылает серверу запрос и разрывает соединение. Сервер...

51
0 / 0 / 0
Регистрация: 29.06.2010
Сообщений: 9
30.06.2010, 19:21
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Maikl Til Посмотреть сообщение
Так ты ведь ему значение в 3 байта поставил. Поставь больше и все будет норм или же приравняй к длине значения и пусть сам выбирает сколько ему байт отправлять.
а ты решил проблему? если ставить столько байтов сколько надо, то при повторном чтении он добавляет это значение не к началу строки и выходит за рамки, там видимо после чтения начальная позиция отсчета смещается....

Добавлено через 1 минуту
я так понял что и у тебя выходит считать только 1 раз?

Добавлено через 8 минут
даааааа, РАБОТАЕТ!!!!!!!!!!!!!!!!!!!!!!!

Добавлено через 34 секунды
в ответе сервера надо писать не WriteLn а просто Write)))
0
 Аватар для Maikl Til
12 / 12 / 1
Регистрация: 19.03.2010
Сообщений: 71
30.06.2010, 19:22  [ТС]
Цитата Сообщение от StyleT Посмотреть сообщение
если ставить столько байтов сколько надо, то при повторном чтении он добавляет это значение не к началу строки и выходит за рамки, там видимо после чтения начальная позиция отсчета смещается....

покажи код как ты принимаешь и отправляешь сообщения. У меня тоже при получении сообщения была такая же фигня, я после этого вообще изменил все. потому что через бит отправлять это как-то не так.


Я наверное знаю как отправить с сервера сообщение, да так чтобы все было нормально ) Только вот надо подумать нормально =)
0
0 / 0 / 0
Регистрация: 29.06.2010
Сообщений: 9
30.06.2010, 19:25
вот серва кусок:
C++
1
2
3
Message+=" fucker";
AContext->Connection->IOHandler->Write(Message.Length());
AContext->Connection->IOHandler->Write(Message);
а вот клиент:
C++
1
2
int length = IdTCPClient1->IOHandler->ReadLongInt();
recvmsg = IdTCPClient1->IOHandler->ReadString(length);
это полностью рабочий вариант
0
 Аватар для Maikl Til
12 / 12 / 1
Регистрация: 19.03.2010
Сообщений: 71
30.06.2010, 19:29  [ТС]
Цитата Сообщение от StyleT Посмотреть сообщение
вот серва кусок:
C++
1
2
3
Message+=" fucker";
AContext->Connection->IOHandler->Write(Message.Length());
AContext->Connection->IOHandler->Write(Message);
а вот клиент:
C++
1
2
int length = IdTCPClient1->IOHandler->ReadLongInt();
recvmsg = IdTCPClient1->IOHandler->ReadString(length);
это полностью рабочий вариант
А в какие обработчики ты прописываешь это?
0
0 / 0 / 0
Регистрация: 29.06.2010
Сообщений: 9
30.06.2010, 19:35
Цитата Сообщение от Maikl Til Посмотреть сообщение
А в какие обработчики ты прописываешь это?
серверу в OnExecute после приема и обработки месседжа, а клиенту сразу после отправки, пока не тестил это с высоким пингом, но по идее должно работать

Добавлено через 3 минуты
сделал проверку с имитацией пинга в 500мс, клиент послушно ждет ответа
0
 Аватар для Maikl Til
12 / 12 / 1
Регистрация: 19.03.2010
Сообщений: 71
30.06.2010, 19:42  [ТС]
сделал проверку с имитацией пинга в 500мс, клиент послушно ждет ответа
ХА ))) ну ты забавный ) Ну конечно он будет ждать. Это ведь не UDP Соединение, udp теряет много пакетов и вообще может не передать ничего, а TCP пока не передаст месагу, не успокоится )))


Покажи весь код, глянуть хочу, чего ты там понаписал )
0
0 / 0 / 0
Регистрация: 29.06.2010
Сообщений: 9
30.06.2010, 19:47
Цитата Сообщение от Maikl Til Посмотреть сообщение
ХА ))) ну ты забавный ) Ну конечно он будет ждать. Это ведь не UDP Соединение, udp теряет много пакетов и вообще может не передать ничего, а TCP пока не передаст месагу, не успокоится )))


Покажи весь код, глянуть хочу, чего ты там понаписал )
при неблокирующем типе мог и не ждать, кажется
Осталось прикрутить SSL для авторизации и все буить заибца)

Сервер:
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
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
 
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::IdTCPServer1Connect(TIdContext *AContext)
{
    Memo1->Lines->Add("Была создана TCP сессия");
}
//---------------------------------------------------------------------------
 
 
void __fastcall TForm1::IdTCPServer1Disconnect(TIdContext *AContext)
{
     Memo1->Lines->Add("Была разрушена TCP сессия");
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::IdTCPServer1Execute(TIdContext *AContext)
{
    UnicodeString Message, ip, port;
    ////////////
    int length = AContext->Connection->IOHandler->ReadLongInt();
    Message = AContext->Connection->IOHandler->ReadString(length);
    Memo1->Lines->Add("------------------------------");
    Memo1->Lines->Add(Message);
    ip = AContext->Binding()->PeerIP;
    port = AContext->Binding()->PeerPort;
    Memo1->Lines->Add(ip+":"+port);
    Memo1->Lines->Add("------------------------------");
    Sleep(500);
    Message+=" fucker";
    AContext->Connection->IOHandler->Write(Message.Length());
    AContext->Connection->IOHandler->Write(Message);
}
//---------------------------------------------------------------------------
Клиент:
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
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
 
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
    IdTCPClient1->Host= eIP->Text;
    IdTCPClient1->Port= StrToInt(ePort->Text);
    try
    {
        IdTCPClient1->Disconnect();
        IdTCPClient1->Connect();
    }
    catch(...)
    {
        ShowMessage("Не удалось подключиться к серверу!");
    }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
    try
    {
        IdTCPClient1->Connect("localhost");
    }
    catch(...)
    {
        ShowMessage("Не удалось подключиться к серверу!");
    }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    if(IdTCPClient1->Connected())
    {
        String mesg=Edit1->Text, recvmsg="r";
        IdTCPClient1->IOHandler->Write(mesg.Length());
        IdTCPClient1->IOHandler->Write(mesg);
        int length = IdTCPClient1->IOHandler->ReadLongInt();
        recvmsg = IdTCPClient1->IOHandler->ReadString(length);
        Memo1->Lines->Add("Ответ: "+recvmsg);
    }
    else
    {
        ShowMessage("Нет соединения с сервером!");
    }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
    IdTCPClient1->Disconnect();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::IdTCPClient1Connected(TObject *Sender)
{
    Memo1->Lines->Add("Клиент подключен к серверу");
}
//---------------------------------------------------------------------------
void __fastcall TForm1::IdTCPClient1Disconnected(TObject *Sender)
{
    Memo1->Lines->Add("Связь с сервером прервана");
}
//---------------------------------------------------------------------------
0
 Аватар для Maikl Til
12 / 12 / 1
Регистрация: 19.03.2010
Сообщений: 71
30.06.2010, 19:56  [ТС]
Цитата Сообщение от StyleT Посмотреть сообщение
Осталось прикрутить SSL для авторизации и все буить заибца)
А это как реализовать ?


Так я понимаю у тебя просто

C++
1
2
3
        Message =" fucker";
        AContext->Connection->IOHandler->Write(Message.Length());
        AContext->Connection->IOHandler->Write(Message);
Отсылает значение "Message" Ну если честно, это фигня. А вот как сделать, как я приводил раннее схему. То есть: Клиент отправляет мессагу, сервер получает и обрабатывает ее, и потом сервер посылает ее обратно.
0
0 / 0 / 0
Регистрация: 29.06.2010
Сообщений: 9
30.06.2010, 20:07
Цитата Сообщение от Maikl Til Посмотреть сообщение
А это как реализовать ?
ну к HTTP клиенту я смог прикрутить, думаю и с этим выйдет, там компонентик есть такой, вроде ничего сложного...

Цитата Сообщение от Maikl Til Посмотреть сообщение
Отсылает значение "Message" Ну если честно, это фигня. А вот как сделать, как я приводил раннее схему. То есть: Клиент отправляет мессагу, сервер получает и обрабатывает ее, и потом сервер посылает ее обратно.
но помнится ты не мог корректно считать этот ответ) да и мне больше не надо, сервер будет игровой, так что он только и будет делать что принимать запросы и их обрабатывать, а если ты хочешь что б серв по своей инициативе отправлял данные так это бред не надо превращать серв в клиент, но если уж приспичит то все по этой же схеме, но без считывания перед этим)
0
 Аватар для Maikl Til
12 / 12 / 1
Регистрация: 19.03.2010
Сообщений: 71
30.06.2010, 20:27  [ТС]
Цитата Сообщение от StyleT Посмотреть сообщение
ну к HTTP клиенту я смог прикрутить, думаю и с этим выйдет, там компонентик есть такой, вроде ничего сложного...
А что за компонент ?
0
0 / 0 / 0
Регистрация: 29.06.2010
Сообщений: 9
30.06.2010, 22:13
Цитата Сообщение от Maikl Til Посмотреть сообщение
А что за компонент ?
TIdServerIOHandlerSSLOpenSSL - для серва
TIdSSLIOHandlerSocketOpenSSL - для клиента

Добавлено через 45 минут
тут другая диллема, надо каждому коннекту присвоить id как бы это учудить?
0
294 / 200 / 6
Регистрация: 23.10.2010
Сообщений: 1,173
Записей в блоге: 1
10.01.2012, 14:04
Помогите мне, я не понял а как сделать рассылку от сервера к 3 клиентам, всю тему прочёл но ответа не увидел
0
98 / 10 / 0
Регистрация: 21.02.2011
Сообщений: 474
19.08.2015, 23:36
Вы знаете, У меня по каким то причинам этот ваш "Connection" не член для IdTCPServer... Как быть? Как осуществить прием данных от Клиента?
C++
1
2
3
void __fastcall TForm1::IdTCPServer1Execute(TIdContext *AContext)
{
  int length = IdTCPServer1-> //И нет такого
Использую XE7.

Как осуществить отправку строки клиенту? И как отправить строку строго определенному клиенту, ведь их может быть несколько? Например выбрав его из списка подключенных клиентов? Список в Memo...
Подскажите, дайте совет.
0
98 / 10 / 0
Регистрация: 21.02.2011
Сообщений: 474
20.08.2015, 23:59
C++
1
Form1->Memo1->Lines->Add(Form1->IdTCPServer1->IOHandler-> //НЕТ дальше метода write()
И похожего на него тоже нет. С чем я таким столкнулся в чем дело?
Отличный топик, о том что надо. Но методов таких у классов нет. Что за ...
0
 Аватар для Dinkin
783 / 556 / 136
Регистрация: 31.05.2013
Сообщений: 3,182
Записей в блоге: 3
21.08.2015, 00:46
Топик был создан еще времен BCB6,сейчас так
C++
1
2
3
4
5
6
void __fastcall TForm1::IdTCPServer1Execute(TIdContext *AContext)
{
 
     AContext->Connection->IOHandler.......
}
//---------------------------------------------------------------------------
0
98 / 10 / 0
Регистрация: 21.02.2011
Сообщений: 474
21.08.2015, 00:59
Сейчас, момент. Картинку вставлю сюда.

Тут картинка показывающая что Connection это не метод и не подкласс в классе IdTCPServer
0
 Аватар для Dinkin
783 / 556 / 136
Регистрация: 31.05.2013
Сообщений: 3,182
Записей в блоге: 3
21.08.2015, 09:11
Цитата Сообщение от newline Посмотреть сообщение
Тут картинка показывающая что Connection
где на скрине Connection ?
0
98 / 10 / 0
Регистрация: 21.02.2011
Сообщений: 474
21.08.2015, 18:32
А вот и в том то и дело что нет его!!!
0
 Аватар для Dinkin
783 / 556 / 136
Регистрация: 31.05.2013
Сообщений: 3,182
Записей в блоге: 3
21.08.2015, 19:29
newline, Вы наверное путаете TServerSocet
0
98 / 10 / 0
Регистрация: 21.02.2011
Сообщений: 474
21.08.2015, 23:06
Я специально сохранил оригинальное имя компонента, во избежание неправильного понимания. Компонент INDY называется IdTCPServer. Ну и IdTCPClient тоже. Согласно найденным примерам в инете и на просторах данного сайта должны быть такие методы. А нету. На скриншоте показаны имеющиеся компоненты...

Добавлено через 3 часа 20 минут
Indy Version 10.6.2.5263.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
21.08.2015, 23:06

Снова TCPServer и TCPClient
Пытаюсь сделать программку по этой статье,...

Передача файлов через TcpServer и TcpClient
Добрый день, уважаемые форумчане. Столкнулся я со следующей задачей. Мне необходимо передать файл с одного компьютера на другой, используя...

TcpServer и TcpClient, как переслать сообщение
Как работать с TcpServer и TcpClient в C++Builder 2010? Например, как переслать сообщение от клиента к серверу и обратно?

Оператор && - добавить в одну строчку Memo текст с ListBox1 и ListBox2
значит нужно добавить в одну строчку Memo текст с ListBox1 и ListBox2 хотел реализовать через оператор &quot;и&quot; &amp;&amp; но видает...

Rad studio XE3 && OpenGL
скачал отсюда библиотеки http://www.onlinedisk.ru/file/620466/ glut.dll and glut32.dll скопировал в windows/system32 glut.h и glaux.h...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru