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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 06.03.2012, 23:39
F1zLe F1zLe вне форума
Прохожий
 
Регистрация: 29.12.2011
Сообщения: 20
Репутация: -440
Сообщение Клиент - сервер

Будте добры, помогите поалуста напишите пожалуста код, чтоб XE2 поддерживала...
Надо написать клиент серверное приложение на winsock или indy 10 пожалуста очень прошу, чтоб смог разбираться, ну или обьясните по какому принципу вааще работает передача по сети...
Спасибо за внимание
Ответить с цитированием
  #2  
Старый 07.03.2012, 00:09
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Для принципов существует гугл. Для "напишите мне" есть раздел работа и тот же гугл, исходников сотни (если не тысячи). Форум для случая "не получается там-то".
В общих чертах WinSock - для сервера создается сокет, привязывается к адресу, устанавливается в режим прослушки и принимаются клиенты. Для клиента - создается сокет и подключается к серверу. Дальше обмен данными через send и recv.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
  #3  
Старый 07.03.2012, 01:17
F1zLe F1zLe вне форума
Прохожий
 
Регистрация: 29.12.2011
Сообщения: 20
Репутация: -440
По умолчанию

Думаешь я не искал,, я неделю искал, то находил не то то находил но не работает...поэтто му я сюда и написал, если вы знатоки то киньте пожалусто ссылку тогда для кода
Ответить с цитированием
  #4  
Старый 07.03.2012, 01:22
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Я себя знаю: я гуглить умею очень плохо. Но даже я нагуглил за 40 секунд.
Берем, пишем, получаем. Третья ссылка. Исчерпывающая информация для начала, по блокирующему режиму.
От себя добавлю, лучше делать WSAStartup($202, Data). И что весь WinSock, описанный в статье, можно юзать без добавления каких-то файлов. Просто прописать uses WinSock.
Просто писать очередной мануал на 10 страниц по каждому такому вопросу в N+1й раз ни у кого желания нет, учитывая, что таковых уже много.
Ещё кстати видел подробнейший разбор WinSock в книге Флёнова "Delphi глазами хакера". Там было всё, вплоть до HTTP клиента и неблокирующего TCP сервера.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.

Последний раз редактировалось Bargest, 07.03.2012 в 01:35.
Ответить с цитированием
  #5  
Старый 07.03.2012, 11:39
F1zLe F1zLe вне форума
Прохожий
 
Регистрация: 29.12.2011
Сообщения: 20
Репутация: -440
По умолчанию

Хм...Спасибо огромное, ток там разбирают winsock 2 , можно ли исспользовать winsock просто?
Ответить с цитированием
  #6  
Старый 07.03.2012, 15:15
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Они похожи. Я с сетями хоть работал и немного, но различий не встречал.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
  #7  
Старый 07.03.2012, 17:22
F1zLe F1zLe вне форума
Прохожий
 
Регистрация: 29.12.2011
Сообщения: 20
Репутация: -440
По умолчанию

bind(socks,@sockaddr,16); - кидает ошибку на @sockaddr, а точнее на @...
Убрал её - скомпилировалось...Но повлияет это на дальнейшую работу?Причем тут эта @?
Ответить с цитированием
  #8  
Старый 07.03.2012, 17:28
F1zLe F1zLe вне форума
Прохожий
 
Регистрация: 29.12.2011
Сообщения: 20
Репутация: -440
По умолчанию

2-ую ошибку кидает на Server.s_addr:=inet_addr(PChar('127.0.0.1')); а точнее на PChar
[DCC Error] Unit1.pas(44): E2010 Incompatible types: 'PAnsiChar' and 'PWideChar'
исправил на PAnsiChar - также хочу знать не повлияет это на дальнейшую работу?
Ответить с цитированием
  #9  
Старый 07.03.2012, 18:12
F1zLe F1zLe вне форума
Прохожий
 
Регистрация: 29.12.2011
Сообщения: 20
Репутация: -440
По умолчанию

Кароче сделал я этот проект на XE2 b и нехера не работает

Сервер :
Код:
unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs,winsock, Vcl.StdCtrls;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  inf:TWSADATA;
  socks,sockc,i,z:integer;
  sockaddr:TSockAddr;
  s: array[0..100] of Char;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin

 //инициализируем библиотку
 WSAStartup($202,inf);

 //присваиваем переменной протокол
 socks:=socket(AF_INET,SOCK_STREAM,0);

 //адресс сервера
 SockAddr.sin_family:=AF_INET;
 SockAddr.sin_port:=htons(21);
 SockAddr.sin_addr.S_addr:=htonl(INADDR_ANY);

 //размер адресса сокета
 i:=sizeof(sockaddr);

 //привязываем структуру к сокету
 Bind(socks,SockAddr,sizeof(SockAddr));

 //прослушиваем порт
 Listen(Socks,3);

 while true do
  begin
    sockc:=accept(socks,@sockaddr,@i);
    if sockc<>-1 then
      begin
        z:=recv(sockc,s,100,0);
        if z<>-1 then
          ShowMessage(s);
      end;
  end;

end;

end.









Клиент :
unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs,winsock, Vcl.StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  inf: TWSADATA;
  socks: integer;
  sockaddr: TSockAddr;
  Server:TInaddr;
  s: array[0..100] of Char;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin

 //присоединяемся к серверу
 connect(socks,sockaddr,sizeof(sockaddr));

 //тправка сообщения
 s:='Test';
  if connect(socks,sockaddr,sizeof(sockaddr))<>-1 then
    begin
      send(socks,s,Length(s),0);
    end;

end;

procedure TForm1.FormCreate(Sender: TObject);
begin

 //подключаем адресс сервера
 Server.S_addr:=inet_addr(PAnsiChar('127.0.0.1'));

 //инициализируем библиотку
 WSAStartup($202,inf);

 //присваиваем переменной протокол
 socks:=socket(AF_INET,SOCK_STREAM,0);

 //адресс клиента
 SockAddr.sin_family:=AF_INET;
 SockAddr.sin_port:=htons(21);
 sockaddr.sin_addr := Server;

end;

end.
Админ: Пользуемсяя тегами для оформления кода!

Последний раз редактировалось Admin, 07.03.2012 в 21:07.
Ответить с цитированием
  #10  
Старый 07.03.2012, 18:47
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

1) Заверни код в [code ][ /code] (без пробелов)
2) В функции socket последним параметром лучше юзать константу IPPROTO_IP вместо 0.
3) @ означает адрес. В WinSock вроде бы параметр передается как var, т.е. и так по адресу.
4) PAnsiChar на работу не повлияет. Думаю. Просто в XE2 строки приравняли к юникодовым строкам, что не всегда есть гуд. В данном случае делфа должна сама перекодировать в Ansi при юзании прямого преобразования.
5) Юзать порт 21 не советую. Лучше брать значение >1000. Но это не очень важно.

Что именно не работает? Не стартует сервер? Не подключается клиент? Не передаются данные? Или передаются неверно?
__________________
jmp $ ; Happy End!
The Cake Is A Lie.

Последний раз редактировалось Bargest, 07.03.2012 в 18:54.
Ответить с цитированием
  #11  
Старый 07.03.2012, 21:26
F1zLe F1zLe вне форума
Прохожий
 
Регистрация: 29.12.2011
Сообщения: 20
Репутация: -440
По умолчанию

Не идет отправка сообщения, то есть не подключается вааще не работает
Ответить с цитированием
  #12  
Старый 07.03.2012, 22:16
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

А на Indy не проще сделать? Там для этого есть неплохие компоненты... пользоваться удобно, не надо писать всю инициализацию. А работает все равно через winsock.
Ответить с цитированием
  #13  
Старый 07.03.2012, 23:28
F1zLe F1zLe вне форума
Прохожий
 
Регистрация: 29.12.2011
Сообщения: 20
Репутация: -440
По умолчанию

У меня инди токо 10,
а в гугле искал там на 9 ток в 10 нету write read writeln readln
Если не трудно подсказать код то подскажи=)
Мне кароче вааще кароче такая прога нужна --- подскажите мож как лучше сделать ---
У чувака на компе сервер - работает всегда,
У меня клиент., я нажимаю кнопку подключить - мне отчет что подключен
Дальше я через эдит отправляю ему сообщения
И когда захочу могу отключится от него
Ответить с цитированием
  #14  
Старый 07.03.2012, 23:47
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Судя по вашему сообщению, вам лет 15, а, если учитывать орфографию, то всего 5. Немудрено, что вы ничего не можете найти в поисковых серверах, они рассчитаны на достаточно грамотных людей. Попробуйте без распальцовки и фени составить грамотный запрос и, уверяю вас, найдётся достаточно много ссылок на различные примеры. А вот когда у вас что-либо не получится, тогда есть смысл обращаться за конкретной помощью.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
Этот пользователь сказал Спасибо angvelem за это полезное сообщение:
ApxaHGe1 (08.03.2012)
  #15  
Старый 08.03.2012, 16:43
F1zLe F1zLe вне форума
Прохожий
 
Регистрация: 29.12.2011
Сообщения: 20
Репутация: -440
По умолчанию

Блять...нахер мне оформлять сообщение, я не на уроке русского....Нормальные люди уже подсказали как и что...
У меня остался один вопрос - как строку типа string сделать строкой типа array of ansichar ?
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter