/ Forside / Teknologi / Udvikling / Perl / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Perl
#NavnPoint
bjarneA 141
poul_from 50
soccer 30
Nicknack 14
Tmpj 0
Sockets.. port unavalible?!?
Fra : DeepBlur


Dato : 30-10-01 06:37

Nej NG.
Nu føler jeg, snart at jeg har prøvet alt, og det vil bare ikke virke.
Vedlagte code skal sende en udp pakke til en server, og serveren vil svare
promte på denne besked. Problemet er bare at serveren sender en ICMP
tilbage, at porten er "unavalible" ... #!&?!"#¤ ... Har tjekket pakkerne i
netxray, og de pakker jeg selv har lavet er total ens med de pakker som
kommer fra klienterne.

Er der nogle der kan hjælpe mig med dette..
På forhånd Tak..

Deepblur.


$sock = IO::Socket::INET->new(
PeerAddr => '172.16.97.2',
PeerPort => '26016',
LocalPort => '2000',
Type => SOCK_DGRAM,
Proto => 'udp')
or
die "! can't open socket\n";

print $sock pack("n8", 0xffff , 0xffff , 0x696e , 0x666f , 0x7374 , 0x7269 ,
0x6e67 , 0x0a00);

$sock->recv($socket_in, $socket_recv_max);
print $socket_in;
close $sock;



 
 
Carsten Svaneborg (30-10-2001)
Kommentar
Fra : Carsten Svaneborg


Dato : 30-10-01 16:24

DeepBlur wrote:
> Problemet er bare at serveren sender en ICMP
> tilbage, at porten er "unavalible"

Er der ikke noget med at ICMP kræver root access, fordi
man selv må pakke IP pakkerne, og det fx. er grunden til
at ping er chmod +s for at køre?

--
Carsten Svaneborg
http://www.mpip-mainz.mpg.de/~svanebor/

Lasse Hillerøe Peter~ (30-10-2001)
Kommentar
Fra : Lasse Hillerøe Peter~


Dato : 30-10-01 21:14

In article <x%qD7.3033$Ip2.54181@news010.worldonline.dk>, "DeepBlur"
<suber_20@hotmail.com> wrote:

>$sock = IO::Socket::INET->new(
....

>print $sock pack("n8", 0xffff , 0xffff , 0x696e , 0x666f , 0x7374 , 0x7269 ,
>0x6e67 , 0x0a00);
>
>$sock->recv($socket_in, $socket_recv_max);
>print $socket_in;
>close $sock;

Nu er jeg på absolut ingen måde IP ekspert, tværtimod. Men - du åbner en
socket for at sende et UDP datagram. Og dernæst læser du fra samme socket
- kan man overhovedet det? Skulle du ikke lave en anden socket der lyttede
efter UDP-svaret på en anden port? Eller er UDP ikke så envejs, som jeg
gik og troede?

Hvorfor skal du egentlig bruge UDP?

-Lasse

Dennis Haney (30-10-2001)
Kommentar
Fra : Dennis Haney


Dato : 30-10-01 22:50

lhp+news@toft-hp.dk (Lasse Hillerøe Petersen) writes:

> In article <x%qD7.3033$Ip2.54181@news010.worldonline.dk>, "DeepBlur"
> <suber_20@hotmail.com> wrote:
>
> >$sock = IO::Socket::INET->new(
> ...
>
> >print $sock pack("n8", 0xffff , 0xffff , 0x696e , 0x666f , 0x7374 , 0x7269 ,
> >0x6e67 , 0x0a00);
> >
> >$sock->recv($socket_in, $socket_recv_max);
> >print $socket_in;
> >close $sock;
>
> Nu er jeg på absolut ingen måde IP ekspert, tværtimod. Men - du åbner en
> socket for at sende et UDP datagram. Og dernæst læser du fra samme socket
> - kan man overhovedet det? Skulle du ikke lave en anden socket der lyttede
> efter UDP-svaret på en anden port? Eller er UDP ikke så envejs, som jeg
> gik og troede?

UDP er envejs i den forstand at den ikke er
forbindelses-orienteret. dvs. du kan sende en udp-pakke og udgive dig
som hvem-som-helst. Der er ikke noget der forhindrer den modtagne side
at sende en anden UDP pakke tilbage til hvor den kom fra... Det står
jo stadig i pakke-headeren.

> Hvorfor skal du egentlig bruge UDP?

Nogen ting bruger jo stadig UDP ;)


--
Dennis

Mother said that there would be days like this,
but she never said there would be so many!

DeepBlur (31-10-2001)
Kommentar
Fra : DeepBlur


Dato : 31-10-01 07:10

<-KLIP->

> UDP er envejs i den forstand at den ikke er
> forbindelses-orienteret. dvs. du kan sende en udp-pakke og udgive dig
> som hvem-som-helst. Der er ikke noget der forhindrer den modtagne side
> at sende en anden UDP pakke tilbage til hvor den kom fra... Det står
> jo stadig i pakke-headeren.
>
> > Hvorfor skal du egentlig bruge UDP?
>
> Nogen ting bruger jo stadig UDP ;)
> Dennis

Kunne det tænktes at jeg skal lytte på udp data i tråd?? Har lidt på
fornemmeren, at programmet ikke når at modtage data, og det er grunden til
mit problem. Har i øvrigt brugt mange timer på at søge på nettet, men uden
held. Perl UDP information, syntes at være meget sparsomt på nettet.

--

DeepBlur

- For at få noget gjort skal en komité bestå af tre personer hvoraf de to er
fraværende.



Lasse Hillerøe Peter~ (31-10-2001)
Kommentar
Fra : Lasse Hillerøe Peter~


Dato : 31-10-01 10:47

In article <kAMD7.3662$Ip2.99977@news010.worldonline.dk>, "DeepBlur"
<suber_20@hotmail.com> wrote:

>Kunne det tænktes at jeg skal lytte på udp data i tråd?? Har lidt på
>fornemmeren, at programmet ikke når at modtage data, og det er grunden til

Jamen - du sender en UDP-pakke. Du kan ikke en gang være sikker på den
kommer frem - der er ingen deliverygaranti. Der er ikke nogen forbindelse
etableret. Så den eneste måde jeg kan se at du kan modtage noget på, er
ved at sætte en anden socket op til at lytte efter UDP-pakker på en
passende port.

>mit problem. Har i øvrigt brugt mange timer på at søge på nettet, men uden
>held. Perl UDP information, syntes at være meget sparsomt på nettet.

Det er nok fordi de få mennesker der laver noget der snakker UDP,
alligevel bare laver det i C.

-Lasse

Peter Brodersen (31-10-2001)
Kommentar
Fra : Peter Brodersen


Dato : 31-10-01 15:43

On Wed, 31 Oct 2001 10:47:28 +0100, lhp+news@toft-hp.dk (Lasse
Hillerøe Petersen) wrote:

>Jamen - du sender en UDP-pakke. Du kan ikke en gang være sikker på den
>kommer frem - der er ingen deliverygaranti.

Det er rigtigt nok at man ikke har nogen garant, hvorfor man så typisk
blot ville operere med en form for timeout. Indenfor den periode
skulle perl så blot vælge at lytte på den port, den sendte pakken fra.

Det er omtrent sådan, det virker under PHP ... nogenlunde. Såvidt jeg
kan se, risikerer man her at PHP - og evt. dermed en httpd-thread -
hænger.

--
- Peter Brodersen

DeepBlur (31-10-2001)
Kommentar
Fra : DeepBlur


Dato : 31-10-01 07:03


"Lasse Hillerøe Petersen" <lhp+news@toft-hp.dk> wrote in message
news:lhp+news-3010012113430001@globemaster.toft-hp.dk...
> In article <x%qD7.3033$Ip2.54181@news010.worldonline.dk>, "DeepBlur"
> <suber_20@hotmail.com> wrote:

<-KLIP->

> Hvorfor skal du egentlig bruge UDP?
>
Jeg skal sende en forspørgsel på spillernavne, fra en HalfLife server! Det
skal køre på LAN, og bruges i en eller anden forstand til at opdatere en
hjemmeside.

--
DeepBlur

- For at få noget gjort skal en komité bestå af tre personer hvoraf de to er
fraværende.



Jens Arnfast (31-10-2001)
Kommentar
Fra : Jens Arnfast


Dato : 31-10-01 08:27

On Wed, 31 Oct 2001 07:02:43 +0100, "DeepBlur" <suber_20@hotmail.com>
wrote:
[snip]
>> Hvorfor skal du egentlig bruge UDP?
>>
>Jeg skal sende en forspørgsel på spillernavne, fra en HalfLife server! Det
>skal køre på LAN, og bruges i en eller anden forstand til at opdatere en
>hjemmeside.

UDP er nu engang smart til spil

her er en rutine jeg har brugt til at skaffe info fra en halflife
server

sub send_query_to_server ($$$) {
   my ($sq_server, $sq_port, $sq_str) = @_;
   return unless ($sq_server && $sq_port && $sq_str);
   my $sq_paddr = sockaddr_in($sq_port, inet_aton($sq_server));
   my $sq_proto = getprotobyname("udp");
   socket(SOCKET, PF_INET, SOCK_DGRAM, $sq_proto) or die
"send_query_to_server::socket: ($!)\n";
   connect(SOCKET, $sq_paddr) or die
"send_query_to_server::connect: ($!)\n";
   send(SOCKET, "$sq_str\n", 0);
   #retrieve content
   my $sq_ret;
   recv(SOCKET, $sq_ret, 65000,0);
   return $sq_ret;
}

så bruges den sådan her:

my $hl_packet = &send_query_to_server('my.1337.halflife.server.dk',
26016,"\xFF\xFF\xFF\xFFdetails\x00");

... så er det op til dig hvad du vil gøre med pakken

--
-jens

"Me no internet, only janitor, me just wax floors."

DeepBlur (31-10-2001)
Kommentar
Fra : DeepBlur


Dato : 31-10-01 15:22


"DeepBlur" <suber_20@hotmail.com> wrote in message
news:x%qD7.3033$Ip2.54181@news010.worldonline.dk...
> Nej NG.
> Nu føler jeg, snart at jeg har prøvet alt, og det vil bare ikke virke.
> Vedlagte code skal sende en udp pakke til en server, og serveren vil svare
> promte på denne besked. Problemet er bare at serveren sender en ICMP
> tilbage, at porten er "unavalible" ... #!&?!"#¤ ... Har tjekket pakkerne i
> netxray, og de pakker jeg selv har lavet er total ens med de pakker som
> kommer fra klienterne.
>
> Er der nogle der kan hjælpe mig med dette..
> På forhånd Tak..
>
> Deepblur.
>
>
> $sock = IO::Socket::INET->new(
> PeerAddr => '172.16.97.2',
> PeerPort => '26016',
> LocalPort => '2000',
> Type => SOCK_DGRAM,
> Proto => 'udp')
> or
> die "! can't open socket\n";
>
> print $sock pack("n8", 0xffff , 0xffff , 0x696e , 0x666f , 0x7374 , 0x7269
,
> 0x6e67 , 0x0a00);
>
> $sock->recv($socket_in, $socket_recv_max);
> print $socket_in;
> close $sock;
>

Hej.. jeg skriver lige for at sige at jeg har løst problemet, og det viste
sig at være en fejl 40. (Fejl sket 40 cm fra skærmen). Jeg havde sat et
forkert port nummer. skulle have været 27015. Så den kode jeg har skrevet
var god nok, men det var bare mig der ikke kunne "se" det...
Men ellers ville jeg bare sige tak til alle de fine svar jeg har fået... Og
jeg håber at jeg selv kan bidrage til denne gruppe...

over and out...


--

DeepBlur

- For at få noget gjort skal en komité bestå af tre personer hvoraf de to er
fraværende.



Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408914
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste