The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"send и recv в одном сокете"
Вариант для распечатки Архивированная нить - только для чтения! 
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"send и recv в одном сокете"
Сообщение от tang0 emailИскать по авторуВ закладки on 06-Ноя-03, 16:48  (MSK)
Ув. товарищи люди. Имею следующую проблему:
клиент подключается к серверу к порту 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);


пакет, посылаемый на сервер доходит удачно и сервер корректно генерит ответ,
но вместо него я получаю пустые строки. =(
Где может быть ошибка?

  Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

1. "send и recv в одном сокете"
Сообщение от devnull emailИскать по авторуВ закладки on 07-Ноя-03, 21:05  (MSK)
честно говоря тяжело вьезжать вечером в твои строки. может ты где-то малюсенькую ошибочку сделал.

я когда-то пакетики сам делал с 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);

и ты там можешь (почти) что угодно колдовать. В вышеназванном примере высылается например пакет с фальшивым адресом источника.

  Рекомендовать в FAQ | Cообщить модератору | Наверх


Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру