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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.02.2008, 13:26   #1
Agasfer
Новичок
Джуниор
 
Регистрация: 05.02.2008
Сообщений: 1
По умолчанию работа с WinSock

код клиента:
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, winsock, StdCtrls;

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

var
Form1: TForm1;

implementation

{$R *.dfm}
var s: tsocket;
d: twsadata;
a: tsockaddr;
procedure TForm1.FormCreate(Sender: TObject);
begin
WSAStartUp(makeword(1,1), d);
s:=socket(AF_INET, sock_stream, 0);
a.sin_family := af_inet;
a.sin_port := htons(666);
a.sin_addr.s_addr := inet_addr('127.0.0.1');
try
connect(s, a, sizeof(a));
label1.Caption:='Connected';
except
label1.Caption:='Connection failed';
end;
end;
end.


код сервера:

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, WinSock, StdCtrls;

type
TForm1 = class(TForm)
Memo1: TMemo;
Button1: TButton;
Button2: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);

private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}
var
s, cs: tsocket;
d: twsadata;
a: tsockaddr;
l: boolean;
procedure TForm1.FormCreate(Sender: TObject);
var t: thandle;
begin
form1.memo1.Lines.Clear;
WSAStartUp($101, d);
form1.memo1.Lines.Add('started');
s:=socket(AF_INET, SOCK_STREAM, 0);
form1.memo1.Lines.Add('socket created');
a.sin_family:=AF_INET;
a.sin_port:=htons(666);
a.sin_addr.S_addr:=inaddr_any;
bind(s, a, sizeof(a));
form1.memo1.Lines.Add('binded');

end;

procedure TForm1.Button1Click(Sender: TObject);
var sockname: tsockaddr;
size: integer;
begin
listen(cs, somaxconn);
l:=true;
while l=true do
begin
s:=accept(cs, nil, nil);
if s<>invalid_socket then
begin
size:=sizeof(tsockaddr);
getpeername(s, sockname, size);
memo1.Lines.Add(inet_ntoa(a.sin_add r));
end;
Application.ProcessMessages;
closesocket(s);
end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
l:=false;
end;

end.

Вопрос:


Почему не аолучается получить IP толькочто подсоединенного клиента, в то время когда сам клиент успешно подсоединяется?
Agasfer вне форума Ответить с цитированием
Старый 13.02.2008, 18:54   #2
Mitron
Форумчанин
 
Аватар для Mitron
 
Регистрация: 10.05.2007
Сообщений: 117
По умолчанию

если я не ошибаюсь, то ты узнаешь host клиента, а на DelphiWorld есть функция получения IP из host
Задачи на заказ

Блажен тот, кто ничего не знает: он не рискует быть не понятым.
Mitron вне форума Ответить с цитированием
Ответ


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

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

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
WinSock (send, recv) AidarBik Работа с сетью в Delphi 1 27.07.2008 15:22
Winsock не соединяет Da$aD Работа с сетью в Delphi 0 11.07.2008 22:57
Proxy в WinSock SHEI'TI Работа с сетью в Delphi 3 29.03.2008 18:27
Многопользовательский сервер на Winsock SirToxa Работа с сетью в Delphi 7 27.03.2008 15:29
big troubles with winsock joker Работа с сетью в Delphi 3 28.09.2007 23:16