Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: Кто может объяснить по С# кое что . в скайпе

Кто может объяснить по С# кое что .. в скайпе
Ответ: Во-первых удивлю: С и С# - абсолютно разные языки программирования, а во-вторых напомню пункт 4.13 правил форума (которые Вы, разумеется, прочитали, но видимо не очень внимательно)
Не стоит просить или предлагать выслать ответ в icq, e-mail и другие средства общения. Эта просьба все равно не будет выполнена, а сообщение будет отредактировано модератором.
Есть ещё раздел на форуме, но там за это денег захотят.
Закрыто.
Вопрос: Программа защиты информации по протоколу HDLC

Народ нужна помощь. есть Приложение :

Delphi
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
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
unit Unit1;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ScktComp, ComCtrls, Buttons, ExtCtrls;
type
  TForm1 = class(TForm)
    GroupBox1: TGroupBox;
    Edit1: TEdit;
    Label1: TLabel;
    Edit2: TEdit;
    Label2: TLabel;
    Edit3: TEdit;
    Label3: TLabel;
    Memo1: TMemo;
    Label4: TLabel;
    Edit5: TEdit;
    Label5: TLabel;
    Edit6: TEdit;
    Label7: TLabel;
    GroupBox2: TGroupBox;
    RichEdit1: TRichEdit;
    OpenDialog1: TOpenDialog;
    Button1: TSpeedButton;
    Button3: TSpeedButton;
    SpeedButton1: TSpeedButton;
    LabeledEdit1: TLabeledEdit;
    RadioButton1: TRadioButton;
    RadioButton2: TRadioButton;
    RadioGroup1: TRadioGroup;
    RadioGroup2: TRadioGroup;
    Memo2: TMemo;
    SpeedButton2: TSpeedButton;
    GroupBox3: TGroupBox;
    Memo3: TMemo;
    procedure Button1Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure SpeedButton1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure SpeedButton2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
  kl:boolean;
implementation
 
uses Unit2;
 
{$R *.dfm}
procedure perev1016(sr:string;var se:string);
var chis:real;
begin
chis:=strtofloat(sr);
se:=inttohex(trunc(chis),24);
end;
procedure perev210(sr:string;var se:string);
var j,chis,i,pol:integer;
begin
chis:=0;
pol:=length(sr);
j:=0;
for i:=pol downto 1 do
begin
if sr[i]='1' then
chis:=chis+trunc(exp(j*ln(2)));
j:=j+1;
end;
se:=inttostr(chis);
end;
procedure perev162(sr:string;var se:string);
var chis:real;i,p:integer;so:string;
begin
p:=length(sr);
se:='';
for i:=1 to p do
begin
case sr[i] of
'0':se:=se+'0000';
'1':se:=se+'0001';
'2':se:=se+'0010';
'3':se:=se+'0011';
'4':se:=se+'0100';
'5':se:=se+'0101';
'6':se:=se+'0110';
'7':se:=se+'0111';
'8':se:=se+'1000';
'9':se:=se+'1001';
'A':se:=se+'1010';
'B':se:=se+'1011';
'C':se:=se+'1100';
'D':se:=se+'1101';
'E':se:=se+'1110';
'F':se:=se+'1111';
end;
end;
end;
 
procedure TForm1.Button1Click(Sender: TObject);
var st:string;
begin
if InputQuery('Введите IP адрес первичной станции','Адрес вторичной станции',st) then
begin
 edit2.Text:='1010010101';
end;
end;
procedure Delay(msecs : Longint);
var
FirstTick : Longint;
begin
FirstTick := GetTickCount;
repeat
Application.ProcessMessages;
until GetTickCount - FirstTick >= msecs;
end;
procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
 if opendialog1.Execute then
 begin
 kl:=true;
 LabeledEdit1.Text:=OpenDialog1.FileName;
 memo3.Lines.LoadFromFile(OpenDialog1.FileName);
end;
end;
 
procedure TForm1.Button3Click(Sender: TObject);
var st6,st5,st3,st2,st1,st,st4:string;kol,k,i,j,im:integer;f:file of char;ch:char;
begin
if kl=true then
begin
kl:=false;
assignfile(f,OpenDialog1.filename);
reset(f);
form2.Memo3.Lines.Clear;
while not eof(f) do
 begin
im:=0;
form2.Memo2.Lines.Clear;
edit3.Text:='10100000';
memo2.Lines.Add('Команда RR - готов к приему');
memo2.Lines.Add('---------------------------');
Radiogroup1.itemindex:=0;
RichEdit1.Lines.Clear;
RichEdit1.Lines.Add('011111101010010101100000000000000001111110');
RadioGroup2.ItemIndex:=1;
delay(2000);
 
form2.RadioGroup1.ItemIndex:=0;
form2.RadioGroup2.ItemIndex:=1;
form2.memo1.Lines.Clear;
form2.memo1.Lines.Add('011111101010010101100000000000000001111110');
form2.Show;
delay(2000);
form2.Memo1.Lines.Clear;
form2.Memo1.Lines.Add('011111101010010101110000000000000001111110');
form2.RadioGroup1.itemindex:=1;
form2.RadioGroup2.ItemIndex:=1;
delay(2000);
form2.Hide;
edit3.Text:='10101000';
memo2.Lines.Add('Ответ RR - готов к приему');
memo2.Lines.Add('-------------------------');
RichEdit1.Lines.Clear;
RichEdit1.Lines.Add('011111101010010101110000000000000001111110');
RadioGroup1.itemindex:=1;
RadioGroup2.ItemIndex:=1;
 
st:='';
st:='011111101010010101';
i:=0;
st3:='';
RichEdit1.Lines.Clear;
memo2.Lines.Add('Передача');
memo2.Lines.Add('-------------------------');
st4:='';
st4:=st4;
st5:='';
st6:='';
while (not eof(f))and (i<=512) do
   begin
read(f,ch);
st6:=st6+ch;
perev1016(inttostr(ord(ch)),st3);
perev162(st3,st3);
st4:=st4+st3;
kol:=0;
for k:=1 to length(st3) do
begin
if st3[k]='1' then kol:=kol+1;
if kol=6 then begin insert('0',st3,k);kol:=0;end
end;
i:=i+1;
st5:=st5+st3;
   end;
memo1.Lines.Clear;
memo1.Lines.Add(st4);
//closefile(f);
st5:=st5+'000000000000000001111110';
RichEdit1.Lines.Add(st5);
RadioGroup2.ItemIndex:=0;
edit3.Text:='00000000';
delay(2000);
//////
form2.RadioGroup1.ItemIndex:=0;
form2.RadioGroup2.ItemIndex:=0;
form2.memo1.Lines.Clear;
form2.memo1.Lines.Add(st5);
form2.Show;
delay(2000);
form2.Memo2.Lines.Clear;
form2.Memo2.Lines.Add(st4);
form2.RadioGroup1.itemindex:=0;
form2.RadioGroup2.ItemIndex:=0;
delay(2000);
form2.Memo3.Lines.Add(st6);
form2.RadioGroup1.itemindex:=0;
form2.RadioGroup2.ItemIndex:=0;
delay(2000);
form2.Hide;
 end;
closefile(f);
//ClientSocket1.Socket.SendText('#End');
MessageDlg('Передача данных закончилась',mtInformation,[mbOk],0);
end
else
MessageDlg('Введите информацию',mtError,[mbOk],0);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
kl:=false;
end;
procedure TForm1.SpeedButton2Click(Sender: TObject);
begin
halt;
end;
 
end.
Подскажите как его оформить как программу?Куда вставить или что вообще с этим можно сделать?По идеи программа защиты информации по протоколу HDLC.Сам в программировании 0.Заранее благодарю за помощь.
Ответ: спасибо за помощь
Вопрос: Передача сообщений между клиентами

Всем привет!
Пытаюсь написать программу для передачи сообщений между клиентами (пример взят из статьи "Самоучитель игры на WINSOCK"), но возникли проблемы:
1. После отправки сообщения первым клиентом, второй клиент не увидит его пока не нажать ентер (пока 2 клиент не нажал ентер - 1 клиент висит). Погуглив, нашёл информацию, что можно создать поток для приёма сообщений. Возможно у кого-то есть готовый кусок кода?
2. При попытке вывести сообщение, полученное сервером, в консоль пишет сообщение и ооочень много непонятных символов ╠╠╠╠╠╠╠╠╠╠. Подозреваю, что нужно ставить символ/знак окончания строки, но не представляю, как это сделать...

сервер
Кликните здесь для просмотра всего текста
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
// Пример простого TCP-эхо-сервера
 
#define _WINSOCK_DEPRECATED_NO_WARNINGS
 
#include <stdio.h>
#include <winsock2.h> // Wincosk2.h должен быть раньше windows!
#include <windows.h>
 
#pragma comment(lib, "wsock32.lib")
 
#define MY_PORT 666 // Порт, который слушает сервер 666
 
// макрос для печати количества активных пользователей
#define PRINTNUSERS if (nclients) printf("%d user on-line\n", nclients); \
        else printf("No User on line\n");
 
// прототип функции, обслуживающий подключившихся пользователей
DWORD WINAPI SexToClient(LPVOID client_socket);
 
 
 
 
// глобальная переменная - количество активных пользователей
int nclients = 0;
SOCKET massiv_socket[64];
 
int main(int argc, char* argv[])
{
    char buff[1024]; // Буфер для различных нужд
 
    printf("TCP SERVER DEMO\n");
    // Шаг 1 - Инициализация Библиотеки Сокетов
    // т.к. возвращенная функцией информация не используется
    // ей передается указатель на рабочий буфер, преобразуемый к указателю
    // на структуру WSADATA.
    // Такой прием позволяет сэкономить одну переменную, однако, буфер
    // должен быть не менее полкилобайта размером (структура WSADATA
    // занимает 400 байт)
    if (WSAStartup(0x0202, (WSADATA *)&buff[0]))
    {
        // Ошибка!
        printf("Error WSAStartup %d\n", WSAGetLastError());
        return -1;
    }
 
    // Шаг 2 - создание сокета
    SOCKET mysocket;
    // AF_INET - сокет Интернета
    // SOCK_STREAM - потоковый сокет (с установкой соединения)
    // 0 - по умолчанию выбирается TCP протокол
    if ((mysocket = socket(AF_INET, SOCK_STREAM, 0)) < 0)
    {
        // Ошибка!
        printf("Error socket %d\n", WSAGetLastError());
        WSACleanup(); // Деиницилизация библиотеки Winsock
        return -1;
    }
 
    // Шаг 3 - связывание сокета с локальным адресом
    sockaddr_in local_addr;
    local_addr.sin_family = AF_INET;
    local_addr.sin_port = htons(MY_PORT); // не забываем о сетевом порядке!!!
    local_addr.sin_addr.s_addr = 0; // сервер принимает подключения
                                    // на все свои IP-адреса
 
                                    // вызываем bind для связывания
    if (bind(mysocket, (sockaddr *)&local_addr, sizeof(local_addr)))
    {
        // Ошибка
        printf("Error bind %d\n", WSAGetLastError());
        closesocket(mysocket); // закрываем сокет!
        WSACleanup();
        return -1;
    }
 
    // Шаг 4 - ожидание подключений
    // размер очереди - 0x100
    if (listen(mysocket, 0x100))
    {
        // Ошибка
        printf("Error listen %d\n", WSAGetLastError());
        closesocket(mysocket);
        WSACleanup();
        return -1;
    }
 
    printf("ozidanie podkluceniy...\n");
 
    // Шаг 5 - извлекаем сообщение из очереди
    SOCKET client_socket; // сокет для клиента
    sockaddr_in client_addr; // адрес клиента (заполняется системой)
 
                             // функции accept необходимо передать размер структуры
    int client_addr_size = sizeof(client_addr);
 
    // цикл извлечения запросов на подключение из очереди
    while ((client_socket = accept(mysocket, (sockaddr *)&client_addr, \
        &client_addr_size)))
    {
        massiv_socket[nclients] = client_socket; // добавляем идентификатор клиента в массив
        nclients++; // увеличиваем счетчик подключившихся клиентов
 
                    // пытаемся получить имя хоста
        HOSTENT *hst;
        hst = gethostbyaddr((char *)&client_addr.sin_addr.s_addr, 4, AF_INET);
 
        // вывод сведений о клиенте
        printf("+%s [%s] new connect!\n",
            (hst) ? hst->h_name : "", inet_ntoa(client_addr.sin_addr));
        PRINTNUSERS
 
            // Вызов нового потока для обслужвания клиента
            // Да, для этого рекомендуется использовать _beginthreadex
            // но, поскольку никаких вызовов функций стандартной Си библиотеки
            // поток не делает, можно обойтись и CreateThread
            DWORD thID;
        CreateThread(NULL, NULL, SexToClient, &client_socket, NULL, &thID);
    }
    return 0;
}
 
// Эта функция создается в отдельном потоке
// и обсуживает очередного подключившегося клиента независимо от остальных
DWORD WINAPI SexToClient(LPVOID client_socket)
{
    SOCKET my_sock;
    my_sock = ((SOCKET *)client_socket)[0];
    char buff[20 * 1024];
#define sHELLO "SOCKET PODKLUCHEN\r\n"
 
    // отправляем клиенту приветствие
    send(my_sock, sHELLO, sizeof(sHELLO), 0);
 
    // цикл эхо-сервера: прием строки от клиента и возвращение ее клиенту
    int bytes_recv;
    while ((bytes_recv = recv(my_sock, &buff[0], sizeof(buff), 0)) &&
        bytes_recv != SOCKET_ERROR)
    {
        for (int i = 0; i < nclients; i++)
        {
            if (massiv_socket[i] != my_sock)
            {
                printf("Recv mes: %s", &buff[0]); // !!!!! ЭТА СТРОКА ВЫВОДИТ СООБЩЕНИЕ И ОЧЕНЬ МНОГО НЕПОНЯТНЫХ СИМВОЛОВ (в•*в•*в•*в•*в•*в•*в•*в•*в•*в•*) !!!!! //
                send(massiv_socket[i], &buff[0], bytes_recv, 0); // !!!!! А ЭТА СТРОКА ПОСЫЛАЕТ СООБЩЕНИЕ ВСЕМ КЛИЕНТАМ ИЗ МАССИВА !!!!! //
            }
        }
    }
 
    // если мы здесь, то произошел выход из цикла по причине
    // возращения функцией recv ошибки - соединение с клиентом разорвано
    nclients--; // уменьшаем счетчик активных клиентов
    printf("-disconnect\n"); PRINTNUSERS
 
        // закрываем сокет
        closesocket(my_sock);
    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
// Пример простого TCP-клиента
 
#define _WINSOCK_DEPRECATED_NO_WARNINGS
 
#include <stdio.h>
#include <string.h>
#include <winsock2.h>
#include <windows.h>
 
#pragma comment(lib, "wsock32.lib")
 
#define PORT 666
#define SERVERADDR "127.0.0.1" //Звёздочками пометил свой IP
 
int main(int argc, char* argv[])
{
    char buff[1024];
    printf("TCP DEMO CLIENT\n");
 
    // Шаг 1 - инициализация библиотеки Winsock
    if (WSAStartup(0x202, (WSADATA *)&buff[0]))
    {
        printf("WSAStart error %d\n", WSAGetLastError());
        return -1;
    }
 
    // Шаг 2 - создание сокета
    SOCKET my_sock;
    my_sock = socket(AF_INET, SOCK_STREAM, 0);
    if (my_sock < 0)
    {
        printf("Socket() error %d\n", 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
        {
            printf("Invalid address %s\n", SERVERADDR);
            closesocket(my_sock);
            WSACleanup();
            return -1;
        }
    }
 
    // адрес сервера получен - пытаемся установить соединение
    if (connect(my_sock, (sockaddr *)&dest_addr, sizeof(dest_addr)))
    {
        printf("Connect error %d\n", WSAGetLastError());
        return -1;
    }
 
    printf("Soedinenie s %s uspeshno ustanovlenno\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;
 
        // выводим на экран
        printf("S>C:%s", buff);
 
        // читаем пользовательский ввод с клавиатуры
        printf("C>S:"); fgets(&buff[0], sizeof(buff) - 1, stdin);
 
        // проверка на "quit"
        if (!strcmp(&buff[0], "quit\n"))
        {
            // Корректный выход
            printf("Exit...");
            closesocket(my_sock);
            WSACleanup();
            return 0;
        }
 
        // передаем строку клиента серверу
        send(my_sock, &buff[0], strlen(&buff[0]), 0);
    }
    printf("Recv error %d\n", WSAGetLastError());
    closesocket(my_sock);
    WSACleanup();
    return -1;
}


Спасибо за помощь!

Добавлено через 7 минут
И да. Как реализовать шифрование текста через ключ перед отправкой серверу? Подойдёт ли для моего случая?

Добавлено через 2 часа 32 минуты
Первая проблема решена созданием потока для приёма сообщений.
Вторая решена самым банальным способом
C++
1
buff[bytes_recv] = 0;
Осталась проблема с шифрованием через ключ. Как это можно реализовать?
Ответ: Ну если не принципиально писать самому, то думаю RSA подойдет.
Вопрос: Передача сообщения в Windows-Linux (сокеты)

Пытаюсь написать чат с передачей сообщения. Использую сокеты.
Пока чат простейший - клиент и сервер. Клиент соединяется и передает сообщение. Сервер только слушает порт и получает сообщение. Односторонняя передача.
Линукс дебиан, порт 7. Виндовс 7.

На Windows-Windows всё работает. С одного компа передаю сообщение на другой.
На Windows-Linux не работает. Запускаю сервер (тот что принимает) на Linux. Запускаю клиент на Windows - пытаюсь соединиться - пишет asynchronous socket error 10061, что согласно гуглу значит - сервер на той стороне не запущен.
Но он запущен и ошибок нет.

Есть ли какие нибудь особенности сокетов в "под линукс"? Проект нормально откомпилировался и запустился в Линукс.

Предполагал, что сокеты будут работать как в винде, так и в линуксе. Ведь Qt кросплатформенный. Может, ошибался?
Ответ: Спасибо, заработало. Взял порт выше 1024.
Вопрос: Передача сообщений между процессами и потоками

Здравствуйте, помогите, пожалуйста, с задачей по Операционным системам: Создать процесс с двумя дочерними процессами, процесс с двумя потоками и организовать передачу сообщений между всеми этими процессами.

В питоне я новичок, есть пару набросков, но я не уверен в их правильности.
Здесь я передаю сообщения через обычный pipe, но сложность в том, что сообщения помещаются в очередь и трудно контролировать, какое сообщение куда попадет
Код Python
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
import multiprocessing
import time
import threading
 
(pout,pin)=multiprocessing.Pipe()
#suprocess 1
def fun1(pin, pout):
    print(pout.recv())  
    pin.send('Child Process 1 send message to Child Process 2')
    print(pout.recv())   
    
#subprocess 2
def fun2(pin, pout):
    print(pout.recv())
    pin.send('Child Process 2 send message to Child Process 1')
    print(pout.recv())
 
#main process 2
def fun3(pin, pout):
    t1=threading.Thread(target=fun4, args=(pin, pout))
    t2=threading.Thread(target=fun4, args=(pin, pout))
    t1.start()
    t2.start()
 
#Threads    
def fun4(pin,pout):
    pin.send('Thread send message')
   
#main process 1 
if __name__ =='__main__':
    p1=multiprocessing.Process(target=fun1, args=(pin, pout ))
    p2=multiprocessing.Process(target=fun2, args=(pin, pout ))
    p1.start()
    p2.start()
    pin.send('Parent Process 1 send message to Child Process 1')
    pin.send('Parent Process 1 send message to Child Process 2')
 
    p3=multiprocessing.Process(target=fun3, args=(pin, pout))
    p3.start()
 
    print(pout.recv())
    
    p1.join()
    p2.join()
    p3.join()
    time.sleep(10)
Еще пробовал через сокеты, но приложение ругается на то, что нельзя передавать строки, числа, а только байты.
encode() , decode() не помогают.
Код Python
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
import multiprocessing
import time
import threading
import socket
 
#suprocess 1
def fun1():
    print('Child Process 1 started')
    sock=socket.socket()
    sock.connect(('localhost',64440))
    sdata=('Child Process 1 send message to Main Process')
    sdata.encode()
    sock.send(sdata)
    sock.close()
#subprocess 2
def fun2():
    print('Child Process 2 started')
 
#main process 2
def fun3():
    print('Process 2 started')
    t1=threading.Thread(target=fun4)
    t2=threading.Thread(target=fun4)
    t1.start()
    t2.start()
 
#Threads    
def fun4():
    print('Thread started')
   
#main process 1 
if __name__ =='__main__':
    print('Process 1 started')
    p1=multiprocessing.Process(target=fun1)
    p2=multiprocessing.Process(target=fun2)
    p1.start()
    p2.start()
 
    p3=multiprocessing.Process(target=fun3)
    p3.start()
 
    #server
    sock=socket.socket()
    sock.bind(('',64440))
    sock.listen(5)
    conn, addr=sock.accept()
    while True:
        data=conn.recv(1024)
        if not data:
            break
        data.decode()
        print(data)
    conn.close()
  
    p1.join()
    p2.join()
    p3.join()
    time.sleep(10)
Ответ: Если действовать через сокеты, то на каждый процесс нужен и сервер и клиент?
Вопрос: Wcf передача сообщений об ошибках и предупреждения

В нашей системе существует метод передачи сообщений об ошибках. Мы используем класс, допустим RetVal, который содержит список предупреждений и ошибок. Методы на добавление и обновление объекта возвращают этот объект, который потом проверяется на сервере и ошибки отображаются на сайте. Когда метод должен вернуть какой-либо объект, мы запихиваем в него тот самый RetVal, что несомненно очень неудобно! Передавать RetVal в качестве out параметра тоже не прижилась.Обрабатывать Exceptions не совсем подходит.

Можете подсказать как лучше поступить в этой ситуации?
Ответ:
D129
Клиенту нужно после выполнения "Сохранить всех!" - выдать лог, кто соханился, кто нет, и почему.

В таком варианте - да. В общем случае такое не требуется.
Вопрос: Выдать сообщение о том, что материала не хватает, если будет запрошен кусок ткани

Помогите пожалуйста решить задачки(когда искал смог найти только с оператором for):
1)Найти все двузначные числа сумма квадратов цифр которых делится на 13.
!2)Имеется кусок ткани длинной М метров. От него последовательно отрезаются куски разной длины. Все данные по использованию ткани заносятся в компьютер. Компьютер должен выдать сообщение о том, что материала не хватает, если будет запрошен кусок ткани, большей длины, чем имеется.
Ответ: HaHo, 1.
Pascal
1
2
3
4
5
6
7
8
9
10
11
Var i, x, k : integer;
begin
i:=10;
While (i<=99) do
    begin
    x:=(i div 10)*(i div 10) + (i mod 10)*(i mod 10);
    If (x mod 13=0) then inc(k);
    inc(i);
    end;
Writeln(k);
end.
Вопрос: Защита при передаче сообщения по протоколу TCP и еще кое-что

Значит накопилось много вопросов на счет протокола TCP и передаче по нему данных :
1 - Если идет подключение клиент-сервер , то возможен ли перехват данных шпионской прогой на пк отправителя или получателя.
2 - Передаваемые данные идут в открытом виде? То есть никакого шифрования?
3 - Отправляются данные , и во время отправки у сокета вызывается ShutDown(Both) , что произойдет ? Отправка будет прервана ?После отправки будет тут же ограничена прием/передача?
4 - вопрос-аналог 3-ему , только вызывается вместо Shutdown'а , Close();
5 - А что происходит с сервером когда клиент вызвал Shutdown / Close?
Буду рад ответу на любой вопрос , за каждый полноценное спасибо.
Ответ:
Сообщение от RaevskiAnatoly
А что происходит с сервером когда клиент вызвал Shutdown / Close?
Сервер получает от клиента, закрывшего свой сокет пустой пакет данных. По которому можно определить, что клиент корректно отключился.
Вопрос: Http как траспортный протокол soap

http как траспортный протокол soap что под этим подразумевается?что с контентом http передаётся soap протокол?
Ответ:
Сообщение от ts-alan
http как траспортный протокол soap что под этим подразумевается?
Что данные формируются согласно протоколу SOAP, а передаются(транспортируются) согласно протоколу HTTP.
Вопрос: Приложение под windows и еще кое что

Добрый вечер. Столкнулся с вопросом, который не дает жить вот уже пару дней, а именно: под винду на плюсах можно писать оконные приложения благодаря winapi, mfc, c++/cli. О каждом я прочитал что-то на msdn, что-то тут, что-то на википедии. Сам же знаю не совсем хорошо winapi, зачастую туплю на нем, да и кода получается очень много + я читал, что можно использовать классы, но вот как - гугл не хочет отвечать адекватно. Если на эту тему есть учебники, буду рад названию.

Теперь собственно вопрос №1: исходя из удобности использования/простоты, потребности среди работодателей, вашего опыта что бы вы посоветовали все же изучать? Знаю, что WinApi сейчас не особо востребован уже.

Само приложение, которое мне надо написать в данный момент - это анализатор логов с сервера, которые будут в тхт файле идти в ряд разделенные пробелами, надо будет этот файл загрузить в программу, а выводить логи в виде таблиц(допустим Пользователь|действие|int параметр|дата|время), причем юзер должен будет в зависимости от типа логов сам добавлять/убирать количество столбцов. Фильтры, поиски по значениям надо будет сделать. А так же надо дать возможность писать алгоритм подсветки нужных параметров, отправки сообщений админу на почту при обработке логов через стандартные компоненты if, if/else, for.

Вот и вопрос №2: как лучше реализовать эти компоненты? Сделать что-то вроде внутреннего компилятора? Возможно это не весь список и помимо int значений надо будет строки проверять на равенство.

Помогите кто чем может, пожалуйста.
Ответ:
Сообщение от MrFluderasT
Теперь собственно вопрос №1
Кроме системщиков winapi никому не нужна. Ну еще олдфагам. MS не зря же 15 лет свой дотнет развивают. Как раз для быстрой разработки десктопных/веб приложений.
Сообщение от MrFluderasT
Вот и вопрос №2
Да как угодно. Морду на сишарпе. Ядро хоть на перле, хоть на том же сишарпе.