Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Номер порта(Addr.sin_port)


GanibalLector ©   (2006-01-16 19:46:00) 

Есть акцептирующая нить.В случае успешного акцепта создается еще одна нить.Параметром в эту нить передаю
Addr и TSocket.Далее эта нить работает и в конце,мне хотелось получить IP клиента и номер порта.
Значит,перейдем к сабжу :

//акцептирующая нить
type
 TMode=record
  Sock:TSocket;
  Addr:TSockAddr;
 end;
 PMode = ^TMode;

...
if Select(0,@FDSet,nil,nil,@Tm)<>0 then
         begin
           if FD_IsSet(Sock,FDSet) then
           begin
             AcceptedSock:=Accept(Sock,@Addr,@Len);
             if AcceptedSock<>Invalid_Socket then
             begin
                GetMem(Val,SizeOf(TMode));
                Val.Sock:=AcceptedSock;
                Val.Addr:=Addr;
                BeginThread(nil,0,@ProcessSockEvents,PMode(Val),0,ThId);
                ...

// рабочая нить
function ProcessSockEvents(Param:Pointer):Integer;
var Sock:TSocket;
begin
 ...
 Sock:=PMode(Param).Sock;
 ...
 
 Form1.Memo1.Lines.Add('Created:'+LongToIp(PMode(Param).Addr.sin_addr.S_addr));
 Form1.Memo1.Lines.Add('Port'+IntToStr(PMode(Param).Addr.sin_port));

 // не обращайте внимания на ОТСУТСТВИЕ синхронизации! Это пока черновик!



С IP все впорядке,получаю IP клиентов.А вот с номером порта беда :( Значение получаемое Addr.sin_port
отличается от значения порта,которое показывает утилита TCP-View.

В чем я не прав?


GanibalLector   (2006-01-17 00:15:00) [1]

2 atruhin ©   (16.01.06 20:10) [1]
Таки да. Лажанулся ;)


atruhin   (2006-01-16 20:10:00) [2]

Addr.sin_port - обратный порядок байт.
см. htons, ntohs


Наверх

Титульная страница Поиск, карта сайта Написать письмо