Ув. товарищи люди. Имею следующую проблему:
клиент подключается к серверу к порту 39380 по tcp/ip и передает пакеты
вида: размер данных(4 байта)/код команды(4 байта)/идентификатор(4 байта)/данные(n байт)
сразу же после передачи сервер передает ответ вида:
размер данных(4 байта)/код команды(4 байта)/идентификатор(4 байта)/код ошибки(4 байта)я пишу следующее:
#! /usr/bin/perl
use Socket;
$host="192.168.0.7";
$port="39380";
$nlength="\x0C\x00\x00\x00";
$ndatalength="\x0C\x00\x00\x00";
$ncommandid="\x06\x00\x08\x07";
$ntransactionid="\x01\x00\x00\x00";socket(SOCK, PF_INET, SOCK_STREAM, getprotobyname('tcp'));
$iaddr = inet_aton($host);
$paddr = sockaddr_in($port, $iaddr);
connect(SOCK, $paddr);send (SOCK,$nlength.$ndatalength.$ncommandid.$ntransactionid,0);
$nlength="\x10\x00\x00\x00";
$ndatalength="\x10\x00\x00\x00";recv(SOCK,$nlength.$ndatalength.$ncommandid.$ntransactionid.$errcode,$nlength,0);
print $errcode."\n";
close(SOCK);
пакет, посылаемый на сервер доходит удачно и сервер корректно генерит ответ,
но вместо него я получаю пустые строки. =(
Где может быть ошибка?
честно говоря тяжело вьезжать вечером в твои строки. может ты где-то малюсенькую ошибочку сделал.я когда-то пакетики сам делал с Net::RawIP, там ошибиться сложно. Cмотри сам:
#!/usr/bin/perl -w
use strict;
use Net::RawIP;
my $packet = new Net::RawIP;
$packet->set({
ip => { saddr => '10.80.2.1',
daddr => '10.80.2.1'
},
tcp => { source => 2323,
dest => 23,
ack => 1,
seq => 10000000,
ack_seq => 10000000,
data => 'Pavel Prostine'
}
});
$packet->send(0,1);и ты там можешь (почти) что угодно колдовать. В вышеназванном примере высылается например пакет с фальшивым адресом источника.