Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Интернет и сети
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 28.04.2010, 03:18
JackRu JackRu вне форума
Прохожий
 
Регистрация: 08.07.2009
Сообщения: 46
Репутация: 10
По умолчанию передача байт

Доброе время суток. Я поставил перед собой задачу - необходимо принять 9 байт с сервера ... ) Попробую получить через recv();, при сборке начинает ругаться на сам recv() - видимо не правильно его использую ...
В чём может быть проблема ?


Код:
pack_coding : array[0..6] of char;
...
GetBytes: Integer;
...
GetBytes := recv(TcpClient2, pack_coding, 9, 0);
Ответить с цитированием
  #2  
Старый 28.04.2010, 07:39
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

И чей метод этот recv???
Ответить с цитированием
  #3  
Старый 28.04.2010, 16:10
JackRu JackRu вне форума
Прохожий
 
Регистрация: 08.07.2009
Сообщения: 46
Репутация: 10
По умолчанию

В том то и дело, что не знаю, что это за метод ...
Если есть другие идеи, как принять 9 байт, буду очень благодарен ...
Ответить с цитированием
  #4  
Старый 28.04.2010, 16:20
Аватар для AleD
AleD AleD вне форума
Активный
 
Регистрация: 21.02.2009
Адрес: г.Краснокаменск
Сообщения: 383
Репутация: 91
По умолчанию

Цитата:
Сообщение от JackRu
В том то и дело, что не знаю, что это за метод ...
Если есть другие идеи, как принять 9 байт, буду очень благодарен ...
Всмысле "не знаю"? Я такой метод видел только в WinSock, только перед самими приёмом этих 9 байт нужно инициализировать сокеты, открыть порт и обрабатывать пакеты
__________________
TAleD = class(TUser)
public
function HelpMe(ASubject, ARequest: String): String;
function GiveMeExample(ASubject: String): TStringList;
procedure WriteReview(APost: Integer; ADescription: TStringList);
end;
Ответить с цитированием
  #5  
Старый 28.04.2010, 19:07
JackRu JackRu вне форума
Прохожий
 
Регистрация: 08.07.2009
Сообщения: 46
Репутация: 10
По умолчанию

через WinSock говоришь ... А возможно через TcpClient байты принять ?
Ответить с цитированием
  #6  
Старый 28.04.2010, 19:26
Аватар для Bars1992
Bars1992 Bars1992 вне форума
Активный
 
Регистрация: 24.04.2010
Адрес: Украина, Кременчуг
Сообщения: 249
Репутация: 22
По умолчанию

Юзай idTCPClient Там данные можно принемать в виде строки. Строка состоит из символов. Чтоб узнать код символа есть функция ord(); принял 9 символов, розшифровал и радуешся
__________________
Не твори зла, и жизнь повернется к тебе передом
Ответить с цитированием
  #7  
Старый 29.04.2010, 03:54
Аватар для AleD
AleD AleD вне форума
Активный
 
Регистрация: 21.02.2009
Адрес: г.Краснокаменск
Сообщения: 383
Репутация: 91
По умолчанию

Цитата:
Сообщение от JackRu
через WinSock говоришь ... А возможно через TcpClient байты принять ?
Можно и через него, но я с ним не работал, больше предпочитаю TClientSocket TServerSocket, проблема для новичка может составить фрагментация пакетов, но думаю 9 байт то в 1 пакет уместятся, так что почитай статьи по одному из этих компонентов и юзай
__________________
TAleD = class(TUser)
public
function HelpMe(ASubject, ARequest: String): String;
function GiveMeExample(ASubject: String): TStringList;
procedure WriteReview(APost: Integer; ADescription: TStringList);
end;
Ответить с цитированием
  #8  
Старый 01.05.2010, 04:11
JackRu JackRu вне форума
Прохожий
 
Регистрация: 08.07.2009
Сообщения: 46
Репутация: 10
По умолчанию

Цитата:
Сообщение от AleD
Можно и через него, но я с ним не работал, больше предпочитаю TClientSocket TServerSocket, проблема для новичка может составить фрагментация пакетов, но думаю 9 байт то в 1 пакет уместятся, так что почитай статьи по одному из этих компонентов и юзай

Решил всё таки перебрать программу через TClientSocket TServerSocket ...
Но вот наткнулся на проблему
Код:
If ComboBox2.ItemIndex = 6 then
  begin
  showmessage('Выбран элемент 7');
  ClientSocket1.Host:=114.101.125.36;
  ClientSocket1.Port := 16781;
  ClientSocket1.Open;
ляляля ...

При сборке выдаёт
[Error] Unit2.pas(231): Record, object or class type required- выдаёт, ругаясь на IP

Последний раз редактировалось JackRu, 01.05.2010 в 04:18.
Ответить с цитированием
  #9  
Старый 01.05.2010, 07:47
Аватар для AleD
AleD AleD вне форума
Активный
 
Регистрация: 21.02.2009
Адрес: г.Краснокаменск
Сообщения: 383
Репутация: 91
По умолчанию

Цитата:
Сообщение от JackRu
Решил всё таки перебрать программу через TClientSocket TServerSocket ...
Но вот наткнулся на проблему
Код:
If ComboBox2.ItemIndex = 6 then
  begin
  showmessage('Выбран элемент 7');
  ClientSocket1.Host:=114.101.125.36;
  ClientSocket1.Port := 16781;
  ClientSocket1.Open;
ляляля ...

При сборке выдаёт
[Error] Unit2.pas(231): Record, object or class type required- выдаёт, ругаясь на IP
Правильно компилятор ругается, IP нужно указывать как строку, т.е.
Код:
ClientSocket1.Host:='114.101.125.36';
__________________
TAleD = class(TUser)
public
function HelpMe(ASubject, ARequest: String): String;
function GiveMeExample(ASubject: String): TStringList;
procedure WriteReview(APost: Integer; ADescription: TStringList);
end;
Ответить с цитированием
  #10  
Старый 03.05.2010, 02:36
JackRu JackRu вне форума
Прохожий
 
Регистрация: 08.07.2009
Сообщения: 46
Репутация: 10
По умолчанию

Вернулся опять к тому, с чего начанал ...
как через TClientSocket принять 9 байт и записать их в массив ?

Последний раз редактировалось JackRu, 03.05.2010 в 02:58.
Ответить с цитированием
  #11  
Старый 03.05.2010, 09:03
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

PHP код:
uses ScktComp;

procedure TForm1.Button1Click(SenderTObject);
var
  
clientsocketTClientSocket;
  
nowCardinal;
  
//  наши 9 байт
  
data: array [0..8of Char;  //  или Byte
begin
  
//  создаем клиента
  
clientsocket:=TClientSocket.Create(Self);
  try
    
//  имя сервера
    
clientsocket.Host:='ya.ru';
    
//  порт
    
clientsocket.Port:=80;
    
//  используем синхронный сокет
    
clientsocket.ClientType:=ctBlocking;
    
//  устанавливаем соединение
    
clientsocket.Open;
    try
      
//  отправим http запрос на сервер, чтобы он нам ответил что-нибудь
      //  из чего мы прочитаем только 9 байт
      
clientsocket.Socket.SendText('GET / HTTP/1.0'#13#10);
      
clientsocket.Socket.SendText(#13#10);
      //  запомним "время"
      
now:=GetTickCount;
      
//  ждем ответа максимум 5 сек
      
while GetTickCount-now<5000 do
      
begin
        
//  если готовы 9 байт
        
if clientsocket.Socket.ReceiveLength>9 then
        begin
          
//  читаем их
          
clientsocket.Socket.ReceiveBuf(data[0], 9);
          
//  остальное не нужно
          
Break;
        
end;
      
end;
    
finally
      
//  закрываем соединение
      
clientsocket.Close;
    
end;
  
finally
    clientsocket
.Free;
  
end;
  
//  смотрим ответ
  
Memo1.Lines.Add(data);
end
Ответить с цитированием
  #12  
Старый 10.05.2010, 19:41
terom terom вне форума
Прохожий
 
Регистрация: 05.05.2010
Сообщения: 5
Репутация: 10
По умолчанию

сервер же сначала шапку (header'ы) отпраляет, если по http, потом #13#10#13#10 и потом только ответ от него
Ответить с цитированием
  #13  
Старый 10.05.2010, 22:00
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

Цитата:
Сообщение от terom
сервер же сначала шапку (header'ы) отпраляет, если по http, потом #13#10#13#10 и потом только ответ от него
в данном примере http запрос отправляется только для того, чтобы нам что-то ответили. и нам тут не важно где http заголовок, а где контент. главное прочитать первые 9 байт из сокет-соединения.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 03:34.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter