Как я могу отправить данные по Интернету с помощью сокета?

Я нашел решение, но вместо удаления кнопок панели инструментов я перечисляю все нужные кнопки следующим образом:

toolbar: [
    { name: 'document', groups: [ 'mode', 'document', 'doctools' ], items: ['-','Preview', 'Print', '-' ] },
    { name: 'editing', groups: [ 'find', 'selection', 'spellchecker' ], items: [ 'Find','-','-' ] },
    { name: 'tools', items: [ 'Maximize'] }
    ]
11
задан Mohanavel 4 February 2011 в 06:28
поделиться

8 ответов

Сокет достаточно, если никакие брандмауэры/прокси не включены.

Но, поскольку Интернет включен (не самое быстрое соединение), я предлагаю ради удобства, необходимо лучше выбрать дистанционную работу по http. Тот путь, даже если в будущем изменения установки и брандмауэры/прокси занимаются уравнением, Вы не должны волноваться.

17
ответ дан 3 December 2019 в 01:16
поделиться

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

Вот быстрый пример.

Сервер:

 ThreadPool.QueueUserWorkItem(StartTCPServer);

 private static void StartTCPServer(object state) {
        TcpListener tcpServer = new TcpListener(IPAddress.Parse("192.168.1.15"), 5442);
        tcpServer.Start();
        TcpClient client = tcpServer.AcceptTcpClient();

        Console.WriteLine("Client connection accepted from " + client.Client.RemoteEndPoint + ".");

        StreamWriter sw = new StreamWriter("destination.txt");

        byte[] buffer = new byte[1500];
        int bytesRead = 1;

        while (bytesRead > 0) {
            bytesRead = client.GetStream().Read(buffer, 0, 1500);

            if (bytesRead == 0) {
                break;
            }

            sw.BaseStream.Write(buffer, 0, bytesRead);
            Console.WriteLine(bytesRead + " written.");
        }

        sw.Close();
    }

Клиент:

 StreamReader sr = new StreamReader("source.txt");

 TcpClient tcpClient = new TcpClient();
 tcpClient.Connect(new IPEndPoint(IPAddress.Parse("192.168.1.15"), 5442));

 byte[] buffer = new byte[1500];
 long bytesSent = 0;

 while (bytesSent < sr.BaseStream.Length) {
        int bytesRead = sr.BaseStream.Read(buffer, 0, 1500);
        tcpClient.GetStream().Write(buffer, 0, bytesRead);
        Console.WriteLine(bytesRead + " bytes sent.");

        bytesSent += bytesRead;
  }

  tcpClient.Close();

  Console.WriteLine("finished");
  Console.ReadLine();
13
ответ дан 3 December 2019 в 01:16
поделиться

Больше информации о Ваших потребностях соединения запрашивается, чтобы дать Вам соответствующее решение. Существует много протоколов в Вашем распоряжении и существуют компромиссы для всех них. Вы, вероятно, выберете один из этих двух транспортных уровней:

UDP - Это - метод отправлять-и-забывать передающих пакетов. Хороший для потоковых медиа, который должен не обязательно быть на 100% корректным.

Польза:

  1. Никакое соединение не требуется.
  2. Очень легкий.

Плохое:

  1. Никакая гарантия Вашего пакета, достигающего места назначения (хотя большую часть времени, они делают его).
  2. Пакеты могут прибыть из порядка, в котором Вы отправили их.
  3. Никакая гарантия, что их содержание совпадает с при отправке пакета.

TCP - Это - основанный на соединении протокол, который гарантирует предсказуемое поведение.

Польза:

  1. Вы будете знать наверняка, достиг ли пакет места назначения или нет.
  2. Пакеты прибудут в заказ, который Вы отправили им.
  3. Вам гарантируют это 99,999999999% времени, Ваши пакеты прибудут со своим неизменным содержанием.
  4. Управление потоком - если пакеты отправки машины отправляет слишком быстро, машина получения, может отрегулировать отправляющий пакет уровень отправителя.

Плохое:

  1. Требует, чтобы соединение было установлено.
  2. Значительный больше служебное, чем UDP.

Список за и против ни в коем случае не полон, но это должно быть достаточно информации, чтобы дать Вам способность сделать обоснованное решение. Если возможно, необходимо использовать в своих интересах основанные на прикладном уровне протоколы, которые уже существуют, такие как HTTP, если Вы передаете текст ASCII, FTP при передаче файлов, и так далее.

9
ответ дан 3 December 2019 в 01:16
поделиться

Можно сделать это с классом Сокета .NET, или можно работать с более удобным классом TcpClient.

Во-первых, хотя необходимо выяснить, каким сервером Вы намереваетесь общаться с. Действительно ли это - сервер HTTP или FTP-сервер? И HTTP и FTP являются протоколами прикладного уровня, которые реализованы сверх (использования) сокетов, который является действительно интерфейсом транспортного уровня.

Ваш локальный IP-адрес или адрес маршрутизатора действительно не имеют значения. Однако необходимо знать IP-адрес удаленного хоста, с которым Вы намереваетесь соединиться. Можно получить это путем вызова:

IPHostEntry host;

host = Dns.GetHostEntry(hostname);

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

Судя Вашим вопросом, Вы кажетесь довольно плохо знакомыми с сокетами, так чтение, это могло бы также помочь

3
ответ дан 3 December 2019 в 01:16
поделиться

В Вашем вопросе Вы смешиваете разные вещи. Сокеты являются абстракцией для сетевой связи. Вам, конечно, будет нужен сокет для передачи по сети. Однако возможно Вы не будете видеть, что сокет используется (как в веб-браузере). Http является протоколом связи. Это - то, что проходит канал передачи.

1
ответ дан 3 December 2019 в 01:16
поделиться

Visual Studio имеет много хорошо сделанных средств для создания и потребления SOAP веб-сервисы XML. Я изучил бы его на вашем месте. Несомненно, существует, немного служебные, но кодирующий против него чрезвычайно легки.

Конечно, я не уверен, как хорошо, который масштабировался бы, если бы необходимо было передать, скажем, десятки или hundreads мегабайтов данных через медленные соединения с интернетом. Это действительно предлагает асинхронный ввод-вывод, но я не думаю, что можно получить индикатор хода выполнения, и наиболее определенно нет функциональности резюме.

Добавленный: можно также продолжить использовать сокет. Нет никакой дополнительной работы invloved для соединения с сервером через Интернет. Просто укажите IP-адрес сервера, и далеко Вы идете. Ваша ОС будет заботиться обо всех окровавленных деталях как маршрутизаторы, отсутствующие пакеты, и т.д.

0
ответ дан 3 December 2019 в 01:16
поделиться

Сначала необходимо принять решение, какой протокол Вы хотите использовать TCP или UDP. Затем у Вас есть две опции: 1. используйте Сокет (более низкий уровень) или 2. Используйте класс как TCPClient или UDPClient (который представляет немного более высокую абстракцию. Я предложил бы (для просьбы второй опции).

0
ответ дан 3 December 2019 в 01:16
поделиться

То, что Вы хотите знать, зависит в большой степени от многих частей Вашей инфраструктуры.

Если Вы хотите отправить данные на сервер, который прозрачно подключен к Интернету, это столь же легко как соединяющийся с, он - адрес IP.

Если Вы хотите соединиться с некоторым другом с широкополосным соединением, вещи становятся хитрыми. Обычно необходимо настраивать оба из маршрутизаторов (или по крайней мере целевой) для NAT.

Ознакомьтесь с NAT и основами маршрутизации IP. Подробная информация, которую Вы предоставили, не достаточна для описания точно, что Вы хотите сделать.

0
ответ дан 3 December 2019 в 01:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: