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

Вниз

TCPClient и TCPServer   Найти похожие ветки 

 
Igor_M   (2010-08-31 16:45) [0]

Добрый день, нужно написать сокет-клиента для обмена данными с сервером. Написал стандартный код:

procedure TMainForm.Button2Click(Sender: TObject);
begin
 TcpClient.Active := True;
 s_to := Trim(MemoTo.Text);
 TcpClient.Connect;
 TcpClient.Sendln(Chr(0)+ Chr(Length(s_to)) + s_to);
//  while TcpClient.WaitForData(15000) do  
 MemoFrom.Text := TcpClient.Receiveln("");
end;


От меня сообщение успешно уходит и читается той стороной. Но приложение зависает на последней строчке.

Подскажите для приёма сообщений нужно использовать компонент TCPServer?

Спасибо.


 
Dennis I. Komarov ©   (2010-08-31 16:51) [1]


> Подскажите для приёма сообщений нужно использовать компонент
> TCPServer?

Не нужно...


 
Dennis I. Komarov ©   (2010-08-31 16:52) [2]


> Написал стандартный код:

А что в нем такого стандартного?


 
Dennis I. Komarov ©   (2010-08-31 16:55) [3]


> нужно написать сокет-клиента для обмена данными с сервером.

И что за сервер? Какой режим? И т.д....


 
Сергей М. ©   (2010-08-31 17:02) [4]


> приложение зависает на последней строчке.


А что, по-твоему, оно должно делать, если не "зависать" ?


 
Igor_M   (2010-08-31 17:21) [5]

Подскажите как разбирать то, что приходит с того хоста?


 
Сергей М. ©   (2010-08-31 17:22) [6]


> как разбирать то, что приходит с того хоста?


А с него что-то вообще приходит ?)
Ты об этом ничего не сказал)


 
Igor_M   (2010-08-31 18:18) [7]

Угу. По крайней мере, Wireshark не ошибается :)


 
Сергей М. ©   (2010-08-31 18:30) [8]


> Wireshark не ошибается


ПРичем здесь Вайршарк ?
Сервер ты сам писал, судя по упоминанию TCPServer ? Значит протокол инф.обмена с ним тебе известен ?
Ну так я и спрашиваю - как твой сервер конкретно от вечает твоему же клиенту ?


 
Igor_M   (2010-08-31 18:56) [9]

Нет, сервер я не писал, даже не знаю на чём он написан. Я спрашивал о том, нужно ли использовать этот компонент для разбора получаемых данных. Вопрос как корректно разобрать и работать с этими данными.


 
Сергей М. ©   (2010-08-31 20:47) [10]


> сервер я не писал


Тогда к чему было упоминание TCPServer ? Всуе ?)


> для разбора получаемых данных


Я тебе про фому, а ты опять про ерему)

КАКОЙ прикладной протокол используется ?
Соизволишь наконец уточнить ?)


 
Dennis I. Komarov ©   (2010-09-01 10:24) [11]


> Сергей М. ©   (31.08.10 20:47) [10]
> КАКОЙ прикладной протокол используется ?
> Соизволишь наконец уточнить ?)

Да не знает он...


 
Igor_M   (2010-09-01 10:32) [12]

Да, не знаю. А в чём проблема? - по-моему форум для новичков. Если можете помочь - помогите, а нет - не надо флудить и тратить своё и моё время...


 
Сергей М. ©   (2010-09-01 10:41) [13]


> не знаю


Зато вайршарк знает. Вот и смотри в его протоколе формат ответа сервера.
И , кстати, если ты не знаешь подробностей протокола, то с чего ты взял что запрос клиента к серверу имеет формат

1. Нулевой байт
2. Байт длины сообщения
3. Собственно сообщение
4. CRLF

??

Ты же формируешь запрос именно в таком формате..
На основании чего тобой выбран такой формат ?


 
Dennis I. Komarov ©   (2010-09-01 10:51) [14]


> Сергей М. ©   (01.09.10 10:41) [13]

Ну так в [0] написано:
> Написал стандартный код:


 
Сергей М. ©   (2010-09-01 11:02) [15]


> Dennis I. Komarov ©   (01.09.10 10:51) [14]


хз где  живут такие "стандарты")


 
Igor_M   (2010-09-01 12:00) [16]


> На основании чего тобой выбран такой формат ?

На основании того, что они об этом попросили.
В вайршарке я вижу, что с их хоста на мой запрос пришёл ответ:
"
0000  18 a9 05 1b 6f b8 00 0f  90 33 d6 52 08 00 45 00   ....o... .3.R..E.
0010  00 56 74 dc 40 00 7d 06  f9 fa c0 a8 73 01 c0 a8   .Vt.@.}. ....s...
0020  9a 78 0f d9 0f aa 3b 19  08 0e ae 83 9b 81 50 18   .x....;. ......P.
0030  ff b3 ed bc 00 00 00 2c  32 30 30 31 34 31 32 33   ......., 20014123
0040  34 30 30 30 31 32 30 31  30 30 38 33 31 31 31 31   40001201 00831111
0050  35 30 30 4d 54 53 31 30  30 30 39 31 36 31 35 35   500MTS10 00916111
0060  39 37 34 38                                        9748          
"

Но как его програмно принять, чтобы потом просто работать с текстом?

Т.е. в итоге, мне нужна строка: "2001412340001201 00831111500MTS10 009161119748"


 
Сергей М. ©   (2010-09-01 12:21) [17]


> они об этом попросили


"Они" - это кто ?


> с их хоста на мой запрос пришёл ответ


> мне нужна строка: "2001412340001201 00831111500MTS10 009161119748"


Ну так а ожидаешь ты не эту строку, а

"2001412340001201 00831111500MTS10 009161119748"#13#10

А сервер CRLF следом за строкой не посылает.
А ты все ждешь и ждешь) Ну и висишь при этом как и положено)


 
Dennis I. Komarov ©   (2010-09-01 16:36) [18]

А все что перед, Пушкин пусть разгребает, зыж не царское это дело...

Без описания протокола там нечего делать...


 
Сергей М. ©   (2010-09-01 17:22) [19]


> Dennis I. Komarov ©   (01.09.10 16:36) [18]


Тут ты неправ)
Он же привел дамп IP-пакета..


 
Dennis I. Komarov ©   (2010-09-01 18:17) [20]


> Тут ты неправ)

Где именно?

> 0000  18 a9 05 1b 6f b8 00 0f  90 33 d6 52 08 00 45 00  
> 0010  00 56 74 dc 40 00 7d 06  f9 fa c0 a8 73 01 c0 a8  
> 0020  9a 78 0f d9 0f aa 3b 19  08 0e ae 83 9b 81 50 18  
> 0030  ff b3 ed bc 00 00 00 2c  32 30 30 31 34 31 32 33  
> 0040  34 30 30 30 31 32 30 31  30 30 38 33 31 31 31 31  
> 0050  35 30 30 4d 54 53 31 30  30 30 39 31 36 31 35 35  
> 0060  39 37 34 38                                      


 
Сергей М. ©   (2010-09-01 20:41) [21]


> Dennis I. Komarov ©   (01.09.10 18:17) [20]


Ну если ты про 2C, тогда да, ты прав)
Я просто подумал что ты имеешь ввиду все то что до него в дампе фигурирует)


 
Igor_M   (2010-09-02 10:52) [22]

Добрый день, а можно теперь для тех, кто в танке? :) Какое именно описание мне нужно запросить и как его использовать в коде? Вероянто, они также отвечают - сначала нулевой байт, затем байт длины сообщения и само сообщение, но без CRLF.
Как вы определили, что я жду переноса каретки и потому у меня зависает прога? И можно ли CRLF не ждать - как?


 
Сергей М. ©   (2010-09-02 11:52) [23]


> Какое именно описание мне нужно запросить


Подробное и вразумительное описание ПРИКЛАДНОГО протокола инф.обмена между сервером и его клиентами.

Примеры:

http://ru.wikipedia.org/wiki/SMTP
http://book.itep.ru/4/45/http4561.htm


> как его использовать в коде?


Прямо так как гласит его описание. И никакой отсебячины.


> Вероянто, они также отвечают


Что значит "вероятно" ?
Ты программист или гадалка на кофейной гуще ?)
Программистское ремесло не терпит никаких "вероятно", "авось", "небось" и прочей неопределенности)


> сначала нулевой байт, затем байт длины сообщения и само
> сообщение, но без CRLF

> Как вы определили, что я жду переноса каретки и потому у
> меня зависает прога?


Тут я соврал, приношу извинения.
Вызов ReceiveLn с параметром "" означает, что ты ждешь не CRLF, а терминирующий #0, который сервер, судя по дампу, не посылает. Да и попросту глупо посылать терминирующий символ (или последовательность терм.символов, таких как, к примеру, CRLF), если сообщение предваряется префиксом длины (00 00 00 2c).


 
Dennis I. Komarov ©   (2010-09-02 14:14) [24]


> Вероянто, они также отвечают - сначала нулевой байт, затем
> байт длины сообщения и само сообщение, но без CRLF.

Ну так а в коде где что-то подобное?



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

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

Наверх





Память: 0.5 MB
Время: 0.003 c
2-1284121956
HF-Trade
2010-09-10 16:32
2010.11.28
Проверка прокси серверов в потоках


4-1242025717
vvavva
2009-05-11 11:08
2010.11.28
как запустить программу через командную строку с параметрами?


2-1283828869
Semen
2010-09-07 07:07
2010.11.28
Запрет звука по нажатию Enter


2-1283487912
Semen
2010-09-03 08:25
2010.11.28
Как сделать нормальный буффер


2-1283771755
rnts
2010-09-06 15:15
2010.11.28
Ошибка в запросе





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