Как мне записать данные через Ethernet-соединение на IP-адрес? - PullRequest
1 голос
/ 18 февраля 2009

Мне нужно написать быстрое и грязное приложение для записи некоторых данных через Ethernet-соединение с удаленной машиной. Удаленная машина ждет данных, и я просто хочу собрать некоторые данные для проверки соединения, пропускной способности и т. Д.

Я хотел бы иметь возможность, скажем, посылать известное соединение данных (простой подсчет или повторение) по соединению и иметь возможность увеличить пропускную способность на x2, x10, x100 и т. Д.

Нет необходимости в рукопожатии, CRC, конкретном формате данных, кадрировании и т. Д. Просто старые данные.

Пожалуйста ... никаких сторонних библиотек, только C ++ (или C, или python)

Ответы [ 6 ]

5 голосов
/ 18 февраля 2009

Если вы можете использовать netcat:

echo "BEEFCAKE" | nc remote.host port
3 голосов
/ 18 февраля 2009

Я могу порекомендовать Руководство Биджа по сетевому программированию . Помог мне разобраться во всей этой сети mumbo-jumbo.

Однако, если вам нужно что-то действительно быстрое, почему бы не использовать .NET? У этого есть довольно хорошие классы для того, чтобы делать такие вещи. Вы можете написать свои данные в 10 строк.

P.S. Не сбивайтесь с толку тем фактом, что это написано для * nix. У Winsock все точно такие же функции.

1 голос
/ 18 февраля 2009

Когда вы говорите «IP: Port», вы должны иметь в виду, что вам нужен более высокий уровень, чем просто Ethernet-фрейм. Вы должны прочитать о программировании TCP / UDP / IP. Я думаю, что лучший ресурс для этого - Руководство Биджа. . Это предназначено для сокетов Беркли или окон.

Учебник по сокетам Python здесь .

Или просто используйте googles и выполните поиск «сокет программирования на [языке]».

0 голосов
/ 18 февраля 2009

Похоже, вы хотите иметь возможность насыщать ссылку в целях тестирования, независимо от того, может ли получатель принять все данные. Таким образом, вы не захотите использовать TCP, так как он подтвержден и управляется потоком, чтобы избежать перегрузки приемника.

Вероятно, проще всего пойти с UDP, хотя вы также можете рассмотреть необработанный сокет, если вы действительно хотите записывать кадры Ethernet напрямую (т.е. если вам нужно отправлять данные без заголовков IP / UDP, просто необработанные кадры Ethernet. В этом случае вы Вам понадобится MAC-адрес назначения, чтобы поместить его в кадр Ethernet, чтобы он направлялся в нужное место).

Относительно кадрирования и CRC: оборудование Ethernet будет формировать пакеты и генерировать / проверять CRC.

Редактировать: Это может помочь, если вы можете заявить, что вы пытаетесь достичь. Это для того, чтобы проверить скорость соединений / коммутаторов Ethernet или посмотреть, как быстро отправляющий и принимающий ЦП могут обмениваться данными? (Скорее всего, вы можете отправлять данные через Ethernet быстрее, чем принимающий ЦП, хотя это зависит от скорости Ethernet и ЦП, а также от того, какая ОС работает, насколько загружен, какова сеть стек настроен и т.д ..).

0 голосов
/ 18 февраля 2009

Этот урок, кажется, охватывает то, что вы хотите:

http://www.amk.ca/python/howto/sockets/

0 голосов
/ 18 февраля 2009

Вы можете использовать Розетки .

Вот базовый учебник .

...