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

Вниз

сокеты   Найти похожие ветки 

 
aturasama   (2016-02-10 22:39) [0]

подскажите пожалуйста, только начинаю сокеты изучать.
клиент шлет запросы через инди:
IdHTTP.Post(url, myTStrings, resStream);

сервер на сокетах, вроде бы стандартно написан:
WSAStartup, далее поток ListenThread
в котором
listenSocket := socket (AF_INET, SOCK_STREAM, IPPROTO_TCP);
listenAddr.sin_family := AF_INET;
listenAddr.sin_port := htons(ListenPort);
listenAddr.sin_addr.S_addr := htonl(INADDR_ANY);
Bind(listenSocket, listenAddr, sizeof(listenAddr))
ну и Listen(listenSocket, 50)

далее в цикле жду подключения
clientSocket := accept(listenSocket, @clientAddr, @size);
при подключении создаю поток, в котором читаю данные:
lenRecv:= Recv(clientSocket, buff, 2048, 0);

если локально на машине то получаю нормальный запрос вида:

POST / HTTP/1.0
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded
Content-Length: 192
Host: 127.0.0.1:88
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding: identity
User-Agent: Mozilla/3.0 (compatible; Indy Library)

param1=param1&param2=param2

запустил сервер в локальной сетке на разных ПК- всё приходит кроме post параметров. победить не удалось, решил передавать и читать ответ клиентом через GET, запихнув параметры в base64 и в заголовок User-Agent. По сетке локальной приходит вроде бы нормально, через инет у некоторых то же, но с одного ПК теряется часть оконцовки.
общий размер запроса с параметрами не более 500 байт.

может кто сталкивался и подскажет где туплю?


 
Dimka Maslov ©   (2016-02-11 10:38) [1]

Для начала надо уметь различать сокеты от протокола http. А потом изучить то и другое.


 
KSergey ©   (2016-02-11 15:01) [2]

> далее в цикле жду подключения
> clientSocket := accept(listenSocket, @clientAddr, @size);
>
> при подключении создаю поток, в котором читаю данные:
> lenRecv:= Recv(clientSocket, buff, 2048, 0);

Следует почитать теорию.

Recv() вычитывает пришедший пакет, размер которого - любой. Может 1 байт приехать, может 539, может сразу всё отправленное.
Стоит почитать как использовать Recv() и как научиться понимать, что получено всё, что ожидается и пора собственно начинать анализировать полученное уже на содержательную часть (это будет несколько последовательных вызывово Recv со "сонкатенацией" содержимого полученных буферов).

Готовый код не подскажу, ибо вспоминать надо.

Рекомендую вот такую книжку, ровно по этой теме:
http://www.booksgid.com/programmer/4645-programmirovanie-v-setjakh-microsoft.html


 
KSergey ©   (2016-02-11 15:52) [3]

> (это будет несколько последовательных вызывово Recv со "сонкатенацией" содержимого полученных буферов).

слово и так не понятное, а я еще и буквы всё в нём переставил.
Следует читать так:

(это будет несколько последовательных вызовов Recv() с "конкатенацией" содержимого полученных буферов).



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

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

Наверх





Память: 0.45 MB
Время: 0.001 c
2-1455227853
Dmk
2016-02-12 00:57
2018.02.04
Округление


2-1454909399
Signal
2016-02-08 08:29
2018.02.04
Сети..Сети..и выбор интерфейса в TServerCocket


2-1455547592
Незарегистрированный
2016-02-15 17:46
2018.02.04
Как корректно сравнить/присвоить Longint с Сишными TRUE и FALSE?


2-1455133154
aturasama
2016-02-10 22:39
2018.02.04
сокеты


1-1351687767
cobalt
2012-10-31 16:49
2018.02.04
Декларация и исполнение процедур/функций





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