Читайте также:
|
|
Сделать два потока. Первый осуществляет запись данных в СОМ – порт, второй – чтение. Синхронизацию осуществить с использованием блокировки чтения – записи по аналогии с примером их использования.
Задание 24
Цель работы — сделать периодический таймер. При срабатывании таймера выполнить обмен данными по СОМ – порту
Порядок выполнения
Процесс создания и работы таймера реализовать по аналогии с приведенным примером работы таймера. При его срабатывании необходимо осуществить обмен данными по СОМ – порту.
Задание 25
Цель работы — создать сервер, который обрабатывает сообщения, и при получении сообщения от клиента выполняет обмен данными по СОМ - порту.
Порядок выполнения
Процесс создания и работы сервера реализовать по аналогии с приведенным примером его работы.
Задание 26
Цель работы — с оздать клиента, который выполняет обмен данными по СОМ – порту и отправляет серверу сообщение и принятым массивом данных. Сервер должен отобразить полученный массив и ответить клиенту.
Порядок выполнения
Процесс создания и работы клиента реализовать по аналогии с приведенным примером его работы.
Задание 27
Цель работы — для примера сервера определить тип сообщения, принимаемого от клиента.
Порядок выполнения
Сообщения от клиента поступает в следующем виде
typedef struc{
int mesType; //тип сообщения
char msg[512];//сообщение
}ClientMessageT
ClientMessageT msg;
Необходимо сделать так, чтобы сервер мог принимать ограниченной число клиентов Max_Client. Отвечать клиентам через 5сек - clients[i].timeout = 5сек.
struct {
int in_use;
int rcvid;
int timeout;
}clients [Max_Client];
//просмотреть список клиентов
for(int i = 0; i < Max_Client; i++){
if(clients[i].in_use){
clients[i].timeout -= 1;
if(clients[i].timeout <= 0){
//ответить клиенту. Вызов функции MsgReply с параметрами clients[i].rcvid, EOK,msg. Значение msg.mesType = MES_CLIENT
clients[i].in_use = 0;//освободить клиента
}
}
}
Прием сообщений сервера необходимо реализовать следующим образом:
bool fins = false; //
switch(msg.mesType){
case WM_WAIT_DATA:{
//поиск свободного места для приема клиентов
for(int i = 0; i < MAX_CLIENT; i++){
if(!clients[i].in_use){
clients[i].in_use = 1;
clinets[i]. rcvid = rcvid;
clients[i].timeout = 10;
fins = true;
}
if(!fins){// к серверу подключено максимальное количество клиентов
//ответить клиенту. Вызов функции MsgReply с параметрами clients[i].rcvid, EOK,msg. Значение msg.mesType = M_MAX_CLIENT
}
break;
}
}
Значения переменной msg.mesType определяются через директиву #define. Например #define M_MAX_CLIENT 5 и устанавливаются одинаковыми для клиента и сервера.
Контрольные вопросы
1. Как применяется метод барьеров при работе с СОМ-портом?
2. Как применятся мьютексы при работе с СОМ-портом?
3. В каких случаях применяют блокировки чтения-записи?
4. Какие основные действия выполняются при работе с СОМ-портом?
5. Какие основные функции используются при работе с СОМ-портом?
6. Как организуется периодические обмены данными по СОМ-порту?
7. Как используется метод присоединение при работе с СОМ-портом?
Дата добавления: 2015-12-08; просмотров: 51 | Нарушение авторских прав