Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2010.03.21;
Скачать: [xml.tar.bz2];

Вниз

Sckets: почему так получается   Найти похожие ветки 

 
Галинка   (2008-06-30 17:35) [0]

пробую оседлать сокеты. Вроде в основном работает. Но есть одна проблемка, которая пока решается с помощью sleep(). А именно:

сервер не получает от клиента всю информацию. В осоьбенности когда серверу требуется долгое обращение к базе данныхю Например: кассируем товар <EAN>ett - вводим баркод, нажимаем Total и последния Total для продажи. Но, после введения баркода, сервер обращается к БД, и теряет концовку переданной ему строки. Как это победить?

ПыСы: причина вероятно лежит в том, что сервер раз в пять медленнее клиента (в смусле железо медленнее).


 
clickmaker ©   (2008-06-30 17:40) [1]

что значит "теряет"? Она вообще не доходит полностью?


 
Галинка   (2008-06-30 17:43) [2]

я не могу точно сказать. Но эти буквы - это эмуляция нажатия кнопок на клавиатуре кассы. То что я вижу: ввод баркода осуществляется, потом нажимается ввод, дальше касса обращается к БД для поиска товара по коду, происходит кассирование товара, а тотал уже не доходит. Т.е. чек я закрыть не могу.


 
Галинка   (2008-06-30 17:48) [3]

то же самое происходит и при регистрации кассира, например. Т.е. вводится номер кассира, номер денежного ящика (это то, куда купюры складываются) и ПИН: например, 2020е2020е2020ее. Дальше идет обращение к БД, для поиска данных кассира. После того как кассир определен появляется сообщение "Касса зарегистрирована - нажмите ВВОД" (для этого сообщения собственно и стоит выделенная жирным е). Но эта часть строки игнорируется.

Операции же, которые не требуют обращения к базе (например, шторнирование чека или позици) проходят на "ура".


 
clickmaker ©   (2008-06-30 17:50) [4]

ну а какие варианты?
1. "Усилить" железо на серваке
2. Оптимизировать доступ к БД
3. Организовать очередь, чтобы данные не терялись


 
Галинка   (2008-06-30 17:58) [5]

clickmaker ©   (30.06.08 17:50) [4]

мне наверное подходит только третий вариант. Потому что все остальное никак от меня не зависит. Только как это сделать?

В коде на с++ это выглядело примерно  так

int CRSendKey(int iSocket, char *szKey)
{
int i=0;
 for (i=0;i<strlen(szKey);i++)
 {
  if (*(szKey+i) != """) {
   send(iSocket,szKey+i,1,0);
   wait(iSocket);
  }
 }

return 0;
}


но как выделенное дирным реализовать на яве, я никак не могу найти ((


 
Галинка   (2008-06-30 19:39) [6]

нашла как реализовать wait. Просто серверу надо послать сообщение "wait". Но для меня проблема в том, что я могу посылать сообщения только побуквенно. Т.е. в процедуре:
private void sendRequest(String _request) throws InterruptedException
{
 try{
  output.flush();
  for (int i=0; i<_request.length(); i++)
  {
   output.write(_request.charAt(i));
   sendWait();
  }
 }
 catch (IOException er)
 {
  System.err.println(er.toString());
  System.exit(-1);
 }
}


надо выполнить процедуру:
private void sendWait() throws InterruptedException
{
 String waitReq = "*wait\n";
 try{
  for (int i=0; i<waitReq.length(); i++)
  {
   output.write(waitReq.charAt(i));
  }
 }
 catch (IOException er)
 {
  System.err.println(er.toString());
  System.exit(-1);
 }
}


и вероятно буфер затирается.


 
Галинка   (2008-06-30 19:48) [7]

кажется глупость написала (((


 
Сергей М. ©   (2008-06-30 20:22) [8]

Глупость началась началась раньше, вот с этого:

> причина вероятно лежит в том, что сервер раз в пять медленнее
> клиента (в смусле железо медленнее)


Грамотно реализованный транспортный алгоритм приемника не может терять ни байта передаваемых ей передатчиком по протоколу TCP данных.

Если это так, то проблема - в передатчике.

Поиски источника проблемы следует начинать с выяснения режима работы сокета-передатчика - блокирующий или неблокирующий.


 
Sha ©   (2008-07-01 09:37) [9]

> Галинка

Думаю, через форум научиться работать с сокетами с нуля сложновато будет.


 
ЮЮ ©   (2008-07-01 11:43) [10]

> Думаю, через форум научиться работать с сокетами с нуля
> сложновато будет.


Надеюсь, Галинка поняла, что это приглащение поговорить о сокетах в более тесном общении :)



Страницы: 1 вся ветка

Форум: "Сети";
Текущий архив: 2010.03.21;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.004 c
2-1263982266
lewka
2010-01-20 13:11
2010.03.21
Выплывающая подсказка компонента TBitBtn


2-1263838589
mpdasa
2010-01-18 21:16
2010.03.21
как написать: если A>2 и А<5 тогда


15-1262069352
БарЛог
2009-12-29 09:49
2010.03.21
пример.испытание


3-1236244034
ArchValentin
2009-03-05 12:07
2010.03.21
Проблема с DBGridEh библиотеки EhLib и Адо


2-1263741218
@!!ex
2010-01-17 18:13
2010.03.21
Как поместить кнопку на Caption в Windows Vista and later





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский