Отправить данные через Интернет - PullRequest
0 голосов
/ 27 ноября 2008

У меня есть требование отправить около 100 байтов данных через Интернет. Мой компьютер подключен к Интернету. Я могу сделать это с помощью HTTP, отправляя запросы и получая ответы. Но мое требование - просто отправить данные, а не получить ответ. Я думаю сделать это с помощью программы UDP Client Server. Но для этого мне нужно разместить UDP-клиент в интернете?

Есть ли другой способ сделать это?

есть предложения?

Ответы [ 9 ]

4 голосов
/ 27 ноября 2008

Все, что происходит в Интернете, требует клиента и сервера.

Один ящик играет роль клиента, а другой - роль сервера для вашей конкретной транзакции.

Обычно (но не всегда) ваш локальный ящик является клиентом, а другой - сервером.

Программное обеспечение ДОЛЖНО быть запущено на обоих серверах для реализации некоторого протокола обмена данными.

Сервер может прослушивать сокеты TCP или UDP, с некоторыми ограничениями. Некоторые номера портов являются привилегированными. Некоторые номера портов заблокированы брандмауэрами.

Порт 80, хотя он редко блокируется брандмауэрами, является привилегированным портом. Как правило, вам требуется веб-сервер (например, Apache) или привилегии для прослушивания через порт 80.

«Отправка 100 байтов» может быть выполнена с использованием множества доступных протоколов: Echo, Telnet, FTP, HTTP и т. Д.

3 голосов
/ 27 ноября 2008

Дешевый ответ для отправки 100 байтов данных в интернете.

C:\Windows\system32>ping -n 1 -l 100 -4 google.com

Pinging google.com [209.85.171.99] with 100 bytes of data:
Reply from 209.85.171.99: bytes=56 (sent 100) time=174ms TTL=233

Ping statistics for 209.85.171.99:
    Packets: Sent = 1, Received = 1, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 174ms, Maximum = 174ms, Average = 174ms
2 голосов
/ 27 ноября 2008

Чтобы отправлять данные, но не получать ответ, вы можете просто написать свою программу таким образом, чтобы она не прослушивала ответ. Это не значит, что никто не будет отправлен к вам, просто вы не получите его.

Например, вы можете убедиться, что вы не вызываете «recv» в сокете. Также вы можете использовать «shutdown» для отключения чтения в сокете. В зависимости от базовой реализации, выполнение маршрута «shutdown» может привести к тому, что все входящие пакеты будут просто отброшены.

Что касается отправки пакетов, то на самом деле подойдет любой протокол. Конечно, вам нужно знать о конечном сервере в Интернете, но у вас есть много вариантов. Возможно, самый простой путь - это то, что вы предложили: HTTP (возможно, используйте www.google.com в качестве сервера назначения).

2 голосов
/ 27 ноября 2008

Большим преимуществом HTTP является то, что порт 80 очень часто открыт. С другими протоколами вы должны полагаться на операторов, чтобы открыть порт.

1 голос
/ 27 ноября 2008

Использовать UDP. Откройте сокет, отправьте данные, закройте сокет. Вот и все. Вот версия клиента на Python:

import socket
data = 100*'x'
address = ('192.168.0.123', 8080)    # Host, port
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)    # UDP   
sock.connect(address)
sock.send(data)
sock.close()

На странице Википедии о UDP есть некоторый соответствующий код WinSock. Конечно, другая сторона должна быть достижимой, и там должен быть кто-то, кто слушает, иначе целевая машина ответит пакетом ICMP «недоступен порт» (по крайней мере, если он соответствует стандартам).

1 голос
/ 27 ноября 2008

Ммм ...

Вы хотите отправлять короткие сообщения через Интернет, но без ответа.

Ваше приложение не было бы случайно шпионским ПО, не так ли?

1 голос
/ 27 ноября 2008

Вам нужен клиент (вы) и сервер (другой конец). Для UDP вы отправляете дейтаграммы через Интернет (используя IP). UDP не обеспечивает безопасность, которую обеспечивает TCP, но не требует ответа (но такие ответы являются частью их протоколов, а не ваших).

Я бы предложил использовать TCP, чтобы избавить вас от головной боли.

Также убедитесь, что вы не находитесь за брандмауэром, иначе ваши пакеты не дойдут до пункта назначения, как вы ожидаете.

0 голосов
/ 26 сентября 2012

curl - инструмент командной строки для передачи данных с синтаксисом URL, поддерживающий DICT, FILE, FTP, FTPS, Gopher, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP , SMTP, SMTPS, Telnet и TFTP. curl поддерживает сертификаты SSL, HTTP POST, HTTP PUT, загрузку по FTP, загрузку на основе форм HTTP, прокси-серверы, куки-файлы, аутентификацию пользователя и пароля (Basic, Digest, NTLM, Negotiate, kerberos ...), возобновление передачи файлов, туннелирование прокси и Busload других полезных трюков.

Смотрите примеры здесь

0 голосов
/ 27 ноября 2008

Если вы хотите прослушивать UDP в интернете, его нужно будет где-то разместить.

Вы можете получить хостинг HTTP намного проще, он везде, для UDP вам может понадобиться собственный компьютер или хотя бы виртуальная машина.

...