|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
08.02.2008, 13:26 | #1 |
Новичок
Джуниор
Регистрация: 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 толькочто подсоединенного клиента, в то время когда сам клиент успешно подсоединяется? |
13.02.2008, 18:54 | #2 |
Форумчанин
Регистрация: 10.05.2007
Сообщений: 117
|
если я не ошибаюсь, то ты узнаешь host клиента, а на DelphiWorld есть функция получения IP из host
Задачи на заказ
Блажен тот, кто ничего не знает: он не рискует быть не понятым. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
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 |