Существуют проблемы с предыдущими ответами, когда файл находится на ftp-сервере ( ftp://url.com/file ), следующий код работает, когда файл находится в ftp, http или https:
import urllib2
def file_exists(url):
request = urllib2.Request(url)
request.get_method = lambda : 'HEAD'
try:
response = urllib2.urlopen(request)
return True
except:
return False
Попытайтесь сделать буфер отправки или получения (сервер или клиент) вашего сокета достаточно большим, чтобы вместить ожидаемый объем трафика. Вот пример кода C # с моего собственного многоадресного сервера / клиента UDP на стороне сервера, где dataSock
- это мой Socket
, привязанный к группе многоадресной рассылки UDP:
dataSock.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveBuffer, (NumberOfPackets * PacketSize) + SmallEpsilonForExtraHeadroom);
Также обязательно установите SocketOptionName.SendBuffer
на стороне клиента, чтобы он соответствовал размеру буфера, создаваемому вашим сервером.
Я также рекомендовал бы, если вы еще не знали, сделать размер ваших пакетов меньше, чем MTU. По умолчанию установлено значение MTU 1500 байтов. (MTU - это максимальный размер блока передачи)
Вы все равно можете получать отброшенные пакеты, если вы также не уменьшите скорость отправки, чтобы ваши клиенты могли не отставать. Скорее всего, ваше сетевое оборудование не является узким местом . См. Мой вопрос Требуется микросекундная задержка в приложении .NET для регулирования скорости многоадресной передачи UDP для ответа на эту проблему (использование Секундомер
в цикле while для задержек порядка микросекунд) .
Я не эксперт в этом, но похоже, что вы наталкиваетесь на пропускную способность вашей сети. Возможно, вам потребуется обновить оборудование, чтобы увеличить пропускную способность. Но без знания размера пакетов, пропускной способности сети или количества машин, пытающихся установить связь и т. Д., Это всего лишь предположение.