![]() |
|
Модераторы: Snowy, Poseidon, MetalFan |
![]()
|
|
| a.S.d |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 100 Регистрация: 20.2.2005 Репутация: нет Всего: 2 |
Есть клиент на делфи и сервер на С. Сервер принимает строку так:
Клиент посылает строку:
В итоге на сервер приходит какая-то чушь. Как нужно послать строку, чтобы её можно было получить на сервере, вызвав один раз функцию recv? Это сообщение отредактировал(а) a.S.d - 29.6.2005, 22:30 |
||||
|
|||||
| SoWa |
|
|||
![]() Харекришна ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2422 Регистрация: 18.10.2004 Репутация: 3 Всего: 74 |
А ты уверен в корректности работы процедуры
-------------------- Всем добра |
|||
|
||||
| a.S.d |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 100 Регистрация: 20.2.2005 Репутация: нет Всего: 2 |
С дельфийским сервером то же самое.
|
|||
|
||||
| RA |
|
|||
![]() Брутальный буратина ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3497 Регистрация: 31.3.2002 Где: Лес Репутация: 10 Всего: 115 |
|
|||
|
||||
| a.S.d |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 100 Регистрация: 20.2.2005 Репутация: нет Всего: 2 |
Переделал функцию отправки:
Вроде отправляет нормально, но теперь проблема с сервером. Нормально он принимает за один вызов recv только строку из 3-х символов. Например если послать 'asd' то сервер после вызова recv вернёт в буфер 'asd', если например послать 'test', то на сервере будет 'test@:', если посылать более длинные строки, то сервер принимает их уже несколькими вызовами recv. И вообще какое максимальное количество байт может принять сервер вызовом recv? Добавлено @ 11:15 Кстати на сервер приходит то же самое если писать не на АПИ, а с использованием TClientSocket. |
|||
|
||||
| RA |
|
|||
![]() Брутальный буратина ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3497 Регистрация: 31.3.2002 Где: Лес Репутация: 10 Всего: 115 |
a.S.d Мне кажется проблема в сервере. Давай посмотрим его исходник.
Добавлено @ 10:44 Кстати: procedure SendData(Data:string); var asd:array [1..65535] of char; i: integer; begin for i := 1 to length(Data) do asd[i]:=data[i]; a:=Send(sock, asd, i, 0); end; |
|||
|
||||
| a.S.d |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 100 Регистрация: 20.2.2005 Репутация: нет Всего: 2 |
RAdmin
Да, проблема была с сервером. Решил её так:
Единственное, что мне тут не нравится, это что можно принять за один раз только 32 байта. Придётся принимать несколькими вызовами recv. Но как тут узнать, что передача строки закончена? Добавлено @ 14:33
А что конкретно здесь тебе не нравится? |
||||
|
|||||
| RA |
|
||||
![]() Брутальный буратина ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3497 Регистрация: 31.3.2002 Где: Лес Репутация: 10 Всего: 115 |
Максимальный размер пакета состовляет 65535 байт.
Это я показал как лутше сделать
Можно длбавлять в конец строки спец сигнатуру, тогда сервер приняв её поймёт что это конец. А можно от клиента послать спец сообщение, что мол всё отправленно. |
||||
|
|||||
![]()
|
| Правила форума "Delphi: Сети" | |
|
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делится вскрытыми компонентами
Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Сети | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |