![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Номер порта(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