![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 11.07.2010
Сообщений: 12
|
![]()
Если кто занимался, есть некоторые вопросы по сокетам в дельфи. Есть компонент TServerSocket, есть некая другая прога, на другом компе, которая шлет текст в определнный tcp порт. НО почему-то если юзать Server.Socket.RecivedText я получаю какую-то хрень вместо текста, если юзать ReciveBuf то получается нужный мне текст, НО теряется первый символ, это мне кажется вызвано тем что переменную буфера я прописываю как стринг, а в стринге есть нулевой символ, где хранится длина самой стринги, может поэтому, а прога пишет с нуля, или вообще побитового. Прога - стороння, я доступа не имею к ней, и незнаю на чем она написана. В следствие этого несколько вопросов.
1) Может ли быть, что каким-то образом поменяв кодировку, входного текста на сокет(бред конечно но вдруг), я смогу прочитать его из RecivedText, что будет лучше. 2) Как сделать чтобы в стрингу ReciveBuf'а записывался весь текст с начала, а не без первого символа, он важен, это если с ReciveText ом не выйдет. 3) Как очистить сам буфер, при попытки очистки переменной из ReciveBuf() ничего не происходит, следующие данные "+" к тому что уже было, пока буфер не переполнится... p.s. В американском гугле у всех всё супер принимается в рисерв текст, инфы нет вообще, так что я уже спрашиваю тут... |
![]() |
![]() |
![]() |
#2 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
![]()
1)если принимаете в стринг то RecieveBuf(s[1],Length(s));
что такое s думаю понятно. 3)что? какое переполнение? вы код покажите тогда. если принимать как я сказал то все норм будет, никакого переполнения. получили обработали и тд. Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
![]() |
![]() |
![]() |
#3 |
Пользователь
Регистрация: 11.07.2010
Сообщений: 12
|
![]()
Так вообще ничего не получается, как я могу принять в один символ, всё строку?
Тупо ничего не присылается обычным методом ReceiveBuf(r, 250); всё приходит, но без первого символа... |
![]() |
![]() |
![]() |
#4 | ||
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
![]() Цитата:
![]() Цитата:
RecieveBuf(s[1],Length(s)*SizeOf(Char));//так надежнее. Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
||
![]() |
![]() |
![]() |
#5 | ||
Пользователь
Регистрация: 11.07.2010
Сообщений: 12
|
![]() Цитата:
Цитата:
Код:
|
||
![]() |
![]() |
![]() |
#6 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
![]()
используйте ANSIString.
(и отправляйте и посылайте через этот тип) вообще стоит показать как отправляете. Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. Последний раз редактировалось Пепел Феникса; 13.07.2010 в 00:35. |
![]() |
![]() |
![]() |
#7 |
Пользователь
Регистрация: 11.07.2010
Сообщений: 12
|
![]()
Какая разница как я отправляю, что бы я не отправил ответ будет строго по шаблону, это обычная терминальная программа на другом сервере, которая шлет комманды в ответ, любой из снифферов или утилит для работы с сетью без проблем всё понимает, а я уже неделю не могу понять почему я не могу написать тоже самое, я уже всё переброовал.
Если принимать а ansistring то вообще ниче не получится, тоже самое если принимать в стринг без фиксированного кол-во знаков... |
![]() |
![]() |
![]() |
#8 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
![]()
потому что задавайте длину строке, а потом уже считывайте в нее(по типу как я писал)
а то в 0 пытаемся чтото записать. Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
![]() |
![]() |
![]() |
#9 |
Пользователь
Регистрация: 11.07.2010
Сообщений: 12
|
![]()
s:string[100] - вот длина, то я так пробовал, всеравно не работает.
Работает по прежнему только 2умя способами. 1) РисервТекст - приходят вопросики, полный текст 2) РесирвБуф в в переменную типа s:string[100] - приходит без первого символа, и не полный Все остальные враианты, которые были предложены, либо не компилится даже, либо циклит(что странно).. |
![]() |
![]() |
![]() |
#10 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
![]()
ну а если так
Код:
var s:ANSIstring; Код:
если бы все работало отлично то вы бы не создавали тему. ЗЫ: эта Д2009 с её новым string это ппц(старый string это теперь ANSIString) Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
C#, сокеты | Namolem | Помощь студентам | 0 | 06.05.2010 10:53 |
C#, сокеты | Namolem | Помощь студентам | 0 | 06.05.2010 03:36 |
сокеты в С | TDrive | C/C++ Сетевое программирование | 6 | 03.03.2010 11:59 |
Сокеты | SL1CK | Общие вопросы C/C++ | 8 | 05.10.2009 13:20 |
Сокеты | ben95 | Общие вопросы Delphi | 7 | 09.03.2008 23:26 |