Модераторы: Snowy, Poseidon, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Winsock Send/Recv 
V
    Опции темы
F1reF0x
Дата 13.4.2006, 21:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 10.10.2005

Репутация: нет
Всего: нет



Здраствуйте. У меня возникла такая проблемма, я не могу понять как отправить данные от клиента серверу (winsock). Я понимаю что сначало надо отправлять функцией Send, в потом принимать(на серверной стороне) Recv количество, отправленых байт и количство примаемых байт, но не могу понять как эти байты (с информацией) принимать.

Код сервера:

Код

procedure TMainForm.BindButtonClick(Sender: TObject);
var
  WDat: TWSAData;
  BindSock: TSocket;
  Addr: TSockAddr;
  AcceptedSock: TSocket;
  Len: Integer;
  Buff: Pchar;
begin
  WSAStartup(MAKEWORD(2,0), WDat);
  BindSock:= Socket(AF_Inet, Sock_Stream, 0);

  Addr.sin_family:= AF_INET;
  Addr.sin_port:=  htons(StrToInt(PortEdit.Text));
  Addr.sin_addr.S_addr := inet_addr(PChar('127.0.0.1'));

  Bind(BindSock, Addr, SizeOf(Addr));
  Len:= SizeOf(TSockAddr);
  AcceptedSock:= Accept(BindSock, @Addr, @Len);
  Listen(BindSock, SoMaxConn);
  Recv(BindSock, Buff, SizeOf(Buff), 0);
  // Насколько я понимаю после этой строчки надо начать принимать байты, вопрос в том как.
end;


Код клиента:

Код

procedure TMainForm.ConnectButtonClick(Sender: TObject);
var
  WDat: TWSAData;
  ConnectSock: TSocket;
  Addr: TSockAddr;
  SendBuff: PChar;
begin
  WSAStartup(MAKEWORD(2,0), WDat);
  ConnectSock:= Socket(AF_Inet, Sock_Stream, 0);

  Addr.sin_family:= AF_INET;
  Addr.sin_port:=  htons(StrToInt(PortEdit.Text));
  Addr.sin_addr.S_addr := inet_addr(PChar('127.0.0.1'));

  Connect(ConnectSock, Addr, SizeOf(Addr));
  Send(ConnectSock, SendBuf, SizeOf(SendBuf), 0);
end;


Заранее спасибо.

P.s Поиск по форуму не дал результатов

Это сообщение отредактировал(а) Girder - 13.4.2006, 22:28
PM MAIL   Вверх
this
Дата 13.4.2006, 23:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 98
Регистрация: 12.9.2005

Репутация: нет
Всего: 1



Listen нужно вызывать до Accept, т.е. сначала установить сокет на прослушивание, а уже потом аццептить клиента.
Recv(BindSock, Buff, SizeOf(Buff), 0); - вот здесь ты и принимаешь данные, только не забудь под Buff выделить память.
PM MAIL   Вверх
F1reF0x
Дата 14.4.2006, 02:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 10.10.2005

Репутация: нет
Всего: нет



Код

procedure BindPort(Sender: TObject);
var
  WDat: TWSAData;
  BindSock: TSocket;
  Addr: TSockAddr;
  AcceptedSock: TSocket;
  Len: Integer;
  Buff: Pchar;
  T: String;
begin
  WSAStartup(MAKEWORD(2,0), WDat);
  BindSock:= Socket(AF_Inet, Sock_Stream, 0);
  Addr.sin_family:= AF_INET;
  Addr.sin_port:=  htons(25555);
  Addr.sin_addr.S_addr := inet_addr(PChar('127.0.0.1'));
  Bind(BindSock, Addr, SizeOf(Addr));
  // Биндим порт
  Len:= SizeOf(TSockAddr);
  Listen(BindSock, SoMaxConn);
  // Слушаем порт
  AcceptedSock:= Accept(BindSock, @Addr, @Len);
  // Принимаем соединение
  Recv(BindSock, Buff, 100, 0);
  // Принимаем, выделяем память  
  ShowMessage(Buff);
  //Пустое
End;

procedure TForm1.Button1Click(Sender: TObject);
var
  h2: Cardinal;
begin
  CreateThread(nil, 128, @BindPort, self, 0, h2);
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  WDat: TWSAData;
  ConnectSock: TSocket;
  Addr: TSockAddr;
  SendBuff: PChar;
begin
  SendBuff:= PChar('Test');
  WSAStartup(MAKEWORD(2,0), WDat);
  ConnectSock:= Socket(AF_Inet, Sock_Stream, 0);
  Addr.sin_family:= AF_INET;
  Addr.sin_port:=  htons(25555);
  Addr.sin_addr.S_addr := inet_addr(PChar('127.0.0.1'));
  Connect(ConnectSock, Addr, SizeOf(Addr));
  Send(ConnectSock, SendBuff, SizeOf(SendBuff), 0);

end;


Так тоже не работает
PM MAIL   Вверх
RA
Дата 14.4.2006, 02:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Брутальный буратина
****


Профиль
Группа: Участник Клуба
Сообщений: 3497
Регистрация: 31.3.2002
Где: Лес

Репутация: 10
Всего: 115



Есть старый добрый пример

Присоединённый файл ( Кол-во скачиваний: 277 )
Присоединённый файл  r3c_w2k_src.zip 249,43 Kb
PM   Вверх
F1reF0x
Дата 14.4.2006, 13:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 10.10.2005

Репутация: нет
Всего: нет



Спасибо
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.1014 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.