Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.04.2008, 14:04   #1
BlackOmen
Пользователь
 
Аватар для BlackOmen
 
Регистрация: 27.02.2008
Сообщений: 54
По умолчанию TClientSocket в потоке

Здравствуйте! Никак не получается осуществить функционирование TClientSocket в потоке, он создаётся, но не чего не делает((
У кого - нибудь есть примерчик создания данного компонента в потоке, причём реально рабочий?
BlackOmen вне форума Ответить с цитированием
Старый 26.04.2008, 15:53   #2
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

лучше реализуйте в потоке WinSock. Меньше проблем будет, чем компонент юзать, который и так сам юзает еще поток
BOBAH13 вне форума Ответить с цитированием
Старый 26.04.2008, 16:41   #3
BlackOmen
Пользователь
 
Аватар для BlackOmen
 
Регистрация: 27.02.2008
Сообщений: 54
По умолчанию

Так вот юзал уже WinSock))) не приходит ответ от сервера и всё тут((
попробывал на TClientSocket всё заработало ... в принципе TClientSocket это почти и есть WinSock.
Так что есть идеи/примеры?
BlackOmen вне форума Ответить с цитированием
Старый 26.04.2008, 19:00   #4
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Значит не правильно написали обработку очереди на WinSock. А так сидеть гадать и за вас писать все с нуля, чет нет желания
BOBAH13 вне форума Ответить с цитированием
Старый 27.04.2008, 16:40   #5
BlackOmen
Пользователь
 
Аватар для BlackOmen
 
Регистрация: 27.02.2008
Сообщений: 54
По умолчанию

Цитата:
Сообщение от BOBAH13 Посмотреть сообщение
Значит не правильно написали обработку очереди на WinSock. А так сидеть гадать и за вас писать все с нуля, чет нет желания
Вот именно, за меня не надо ничего писать! Ну вот тогда :
Возпользовшись Винсоском пишу
send(Clisock, Omessage, length(Omessage), 0),
где Omessage = 'GET http://XXX.XX/xxx.php ... HTTP/1.0'#10#10 - обыкновенный HTTP запрос.
Приём ответа производится:
recv(Clisock, Imessage, length(Imessage), 0), - никаких флагов не указывал. Вот сдесь ждётся ответ и так и недожидается ....

Пишу аналогично на ТКлиентсокет - всё работает, о какой очереди вы говорите?
BlackOmen вне форума Ответить с цитированием
Старый 27.04.2008, 17:51   #6
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Как я понял, Omessage: String ? тогда ваши действия send, recv неверны ( в какой то степени ). Я бы сделал так
Код:
send{recv}(Clisock, Pointer(Omessage)^, Length(Omessage), 0);
Думаю так верно, всегда сам так пишу, если приходиться.
BOBAH13 вне форума Ответить с цитированием
Старый 27.04.2008, 20:58   #7
BlackOmen
Пользователь
 
Аватар для BlackOmen
 
Регистрация: 27.02.2008
Сообщений: 54
По умолчанию

Хоть я так уже и делал, всё равно спасибо за помощб ...
BlackOmen вне форума Ответить с цитированием
Старый 27.04.2008, 21:36   #8
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

ну вот на быструю руку накидал надработку над send... там вообщет побольше кода можете найти и в сети

Код:
procedure Send(s: TSocket; var Buf; Count: Integer);
var
  i, n: Integer;
begin
  i := 0;
  while (i < Count) do
  begin
    n := Send(s, Pointer(Integer(@Buf) + i)^, Count - i);
    if (n = SOCKET_ERROR) then Break;
    inc(i, n);
  end;
end;
Попробуйте так отправлять
BOBAH13 вне форума Ответить с цитированием
Старый 27.04.2008, 22:19   #9
BlackOmen
Пользователь
 
Аватар для BlackOmen
 
Регистрация: 27.02.2008
Сообщений: 54
По умолчанию

Цитата:
Сообщение от BOBAH13 Посмотреть сообщение
Как я понял, Omessage: String ? тогда ваши действия send, recv неверны ( в какой то степени ). Я бы сделал так
Код:
send{recv}(Clisock, Pointer(Omessage)^, Length(Omessage), 0);
Думаю так верно, всегда сам так пишу, если приходиться.
Ошибку понял! Я должен был организовать приёмный массив, именно массив а не строку .....


Код:
 
var Imessage:array[0..1000] of char;
....................................
recv(Clisock, Imessage, length(Imessage), 0);
BlackOmen вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
TClientSocket - сохранение JRcoker Общие вопросы Delphi 4 03.08.2008 00:37
Проблемка с TClientSocket Yoger Работа с сетью в Delphi 3 20.09.2007 10:40
Запрос к БД в отдельном потоке (Thread) tyrell lab БД в Delphi 1 14.06.2007 08:42
как вызвать в Dll по указателю функцию, которая определена в главном потоке? SaintRain Общие вопросы Delphi 1 25.11.2006 08:27
как вызвать из Dll функцию, которая определена в главном потоке? SaintRain Win Api 1 23.11.2006 20:08