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

Вниз

Разделение данных в TclientSocket...   Найти похожие ветки 

 
dimich1978   (2003-01-21 10:36) [0]

Пишу
clientsocket1.Socket.SendText(table1.fields[0].asstring);
clientsocket1.Socket.SendText(table1.fields[1].asstring);
clientsocket1.Socket.SendText(table1.fields[2].asstring);
clientsocket1.Socket.SendText(table1.fields[3].asstring);
clientsocket1.Socket.SendText("end");

затем передаю данные серверу в мемо, он их принимает все в кучу, но если я ставлю задержку sleep(100), то все работает нормально.
И можно ли данные разделить без использования слипа?
Расскажите кто как данные посланные клиентом разделяет на сервере?
За все ответы заранее благодарен ВСЕМ.


 
Петров Денис   (2003-01-21 11:04) [1]

А что на сервере (код OnClientRead, пожалуйста)?


 
GreatMaster   (2003-01-21 11:07) [2]

Можно слать через разделитель
это_первая_строка_конец
это_вторая_строка_конец
Copy...Pos("конец")...


 
Anatoly Podgoretsky   (2003-01-21 11:11) [3]

Как ты думаешь, что является разделителями строк?


 
dimich1978   (2003-01-21 11:11) [4]

в коде сервера
s:=socket.receiveText;
memo1.lines.add(s);


 
Петров Денис   (2003-01-21 11:14) [5]

Понятно, почему строки принимаются не по порядку без sleep - ведь ты не контролируешь процесс записи данных в буфер сокета при асинхронном обмене.
Выход: усложни протокол обмена и, если это не критично, клиентский сокет сделай blocked.


 
dimich1978   (2003-01-21 11:15) [6]

#13#10


 
GreatMaster   (2003-01-21 11:26) [7]

А как ты думаешь какие символы мягко скажем не всегда используют в table1.fields[n].asstring? А если и использовали то можно это запретить


 
Verg   (2003-01-21 14:03) [8]

Отсылать данные лучше всего SendBuf, а не SendText, т.к SendText не возвращает результата отправки, который может быть и SOCKET_ERROR/WSAEWOULDBLOCK (это в сущности не ошибка, а типа аналог "помедленней, пжалста, я записсыаю"). И конечно надо синхронизироваться с событием OnWrite:


TBridge=class
.....
Pending : string;
.....
end;
function TBridge.SendData(var Buffer; Size : integer):integer;
var Bptr : pChar;
Sends : integer;
S : string;
begin
BPtr := pchar(@Buffer);
Result:=1; Sends:=0;
if Pending="" then
begin
while (Result>0) and (Sends<Size) do
begin
result:=ClientSocket1.Socket.SendBuf((Bptr+Sends)^,Size-Sends);
if Result>=0 then inc(Sends,Result);
end;
if Result=SOCKET_ERROR then
begin
if WSAGetLastError=WSAEWOULDBLOCK then
SetString(Pending, Bptr+Sends, Size-Sends);
end else begin result:=Sends; Pending:=""; end;
end else
begin
SetString(S, Bptr, Size);
Pending:=Pending+S;
Result:=0;
end;
end;

procedure TBridge.ClientSocket1Write(Sender: TObject;
Socket: TCustomWinSocket);
var S : string;
begin
if Pending<>"" then
begin
S:=Pending;
Pending:="";
SendData(Pchar(@S[1])^, length(S));
end;
end;


 
mrcat   (2003-01-22 00:39) [9]

dimich1978 © (21.01.03 10:36)
...
он их принимает все в кучу
...


а как он должен их "принимать"?

И можно ли данные разделить без использования слипа?

НУЖНО!



 
mrcat   (2003-01-22 00:42) [10]

dimich1978 © (21.01.03 11:15)
...
#13#10
...


Это есть разделитель? Если прийдется передавать текст, содержащий "эти" символы?

Что делать будете?



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

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

Наверх





Память: 0.57 MB
Время: 0.04 c
9-29693
Gerda
2002-10-11 11:07
2003.03.10
Нормали


6-29973
Карелин Артем
2003-01-21 14:04
2003.03.10
Дозвон через удаленный доступ. + Параметры набора.


1-29797
Gonta
2003-02-27 17:51
2003.03.10
Работа с консольными приложениями


7-30171
rover
2003-01-09 15:39
2003.03.10
Кассовый аппарат


14-30054
insmod
2003-02-16 19:26
2003.03.10
Где найти описание парсинга на дельфи?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский