Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

Вопрос, асинхронные сокеты, Delphi

Пользователи, просматривающие топик: none

Зашли как: Guest
Все форумы >> [Компилируемые языки] >> Вопрос, асинхронные сокеты, Delphi
Имя
Сообщение << Старые топики   Новые топики >>
Вопрос, асинхронные сокеты, Delphi - 2009-02-24 22:34:56.906666   
unconnected2

Сообщений: 332
Оценки: 0
Присоединился: 2009-01-16 17:56:12.400000
Вопрос. В проге используются TServerSocket и TClientSocket, связь двух географически удалённых клиентов через сервер. Передаётся файл, через Socket.SendStream. На время передачи прога, естесственно, зависает. Я решил вынести передачу в отдельный поток. Но при этом передавать другие пакеты(сообщения отправлять, например) через сокет нельзя, так ведь?
Post #: 1
RE: Вопрос, асинхронные сокеты, Delphi - 2009-02-25 00:36:39.966666   
_SaZ_

Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
Нет, нельзя. Если тебе нужно делать одновременную отправку - создай 2 подключения. Можно, конечно, извратиться и через одно, но оно того не стоит =). Но если грамотно продумать свой формат передачи данных, то можно крепить какой-нить флажок к пакету, который указывает, что именно передаётся: основная информация или "сообщения".
Post #: 2
RE: Вопрос, асинхронные сокеты, Delphi - 2009-02-25 00:40:25.113333   
Denaturat

Сообщений: 1741
Оценки: 453
Присоединился: 2008-10-27 20:50:06.380000
quote:

ORIGINAL: unconnected2

В проге используются TServerSocket и TClientSocket


несущественно. в контексте - пассивное и активное соединение посредством TCP/IP

quote:

ORIGINAL: unconnected2

связь двух географически удалённых клиентов через сервер


несущественно. loopback ничуть не хуже любого другого соединения

quote:

ORIGINAL: unconnected2

Передаётся файл


несущественно. с точки зрения сети передаётся raw data, что бы она из себя ни представляла

quote:

ORIGINAL: unconnected2

На время передачи прога, естесственно, зависает


это никак не связано с передачей по сети. любой синхронный вызов при отсутствии event loop повесит процесс

quote:

ORIGINAL: unconnected2

Я решил вынести передачу в отдельный поток. Но при этом передавать другие пакеты(сообщения отправлять, например) через сокет нельзя, так ведь?


можно. открываешь соединение на другом порту и отправляешь что угодно
Post #: 3
RE: Вопрос, асинхронные сокеты, Delphi - 2009-02-25 00:43:06.270000   
Denaturat

Сообщений: 1741
Оценки: 453
Присоединился: 2008-10-27 20:50:06.380000
quote:

ORIGINAL: _SaZ_

Нет, нельзя. Если тебе нужно делать одновременную отправку - создай 2 подключения


а разве речь не об этом? :)

quote:

ORIGINAL: _SaZ_

Но если грамотно продумать свой формат передачи данных, то можно крепить какой-нить флажок к пакету, который указывает, что именно передаётся: основная информация или "сообщения".


можно и проще на самом деле, но не в этом суть
Post #: 4
RE: Вопрос, асинхронные сокеты, Delphi - 2009-02-25 02:18:34.836666   
_SaZ_

Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
Ну это самый примитивный вариант =)
Post #: 5
RE: Вопрос, асинхронные сокеты, Delphi - 2009-02-25 12:13:15.383333   
unconnected2

Сообщений: 332
Оценки: 0
Присоединился: 2009-01-16 17:56:12.400000
Насчёт создать новое подключение.. На одном компьютере разрешается одно использование сокетов, разве не так? Или если поменять порт, то можно?

Denaturat, я понимаю, конечно, что ты много знаешь и тебе хочется со всеми поделиться, но.. можешь отвечать по существу а не расчленять мои посты?
Post #: 6
RE: Вопрос, асинхронные сокеты, Delphi - 2009-02-25 13:23:14.073333   
_SaZ_

Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
Он то как раз по существу ответил. А вот ты явно не понимаешь, что такое сокет, адрес, порт и пр. Даже в терминах не разбираешься. Когда человек спрашивает "разве не так?" - значит он где-то это видел. Вот и поделился бы с нами источником своих глубочайших знаний.

"разрешается одно использование сокетов" - даже не фраза, а просто хаотичный набор слов. Что ты этим хотел сказать?
Post #: 7
RE: Вопрос, асинхронные сокеты, Delphi - 2009-02-25 13:23:55.100000   
Denaturat

Сообщений: 1741
Оценки: 453
Присоединился: 2008-10-27 20:50:06.380000
quote:

ORIGINAL: unconnected2

Насчёт создать новое подключение.. На одном компьютере разрешается одно использование сокетов, разве не так? Или если поменять порт, то можно?


сокет определяется парой хост/порт. на одном хосте ты можешь открыть много портов

quote:

ORIGINAL: unconnected2

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


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

http://en.wikipedia.org/wiki/Internet_socket

quote:

A somewhat simplified definition occurring in the literature follows: "The combination of an IP address and a port number is referred to as a socket."
Post #: 8
RE: Вопрос, асинхронные сокеты, Delphi - 2009-02-25 13:32:49.196666   
unconnected2

Сообщений: 332
Оценки: 0
Присоединился: 2009-01-16 17:56:12.400000
Про одно использование сокетов я спросил потому, что когда дважды пытаешься открыть сервер на одном порту, вываливается ошибка с содержанием "Разрешено только одно использование…"..
Post #: 9
RE: Вопрос, асинхронные сокеты, Delphi - 2009-02-25 16:20:03.270000   
unconnected2

Сообщений: 332
Оценки: 0
Присоединился: 2009-01-16 17:56:12.400000
Собственно проблема, из-за которой возник вопрос. Когда я подключаюсь сам к себе(введя свой IP в качестве адреса клиента, или LocalHost в качестве хоста), то передача файла проходит нормально. Когда же тестирую с другим компьютером(удалённым, через интернет), то сообщения доходят нормально, а вот файлы не передаются.. Может ли такое быть?
Post #: 10
RE: Вопрос, асинхронные сокеты, Delphi - 2009-02-25 16:33:32.016666   
Denaturat

Сообщений: 1741
Оценки: 453
Присоединился: 2008-10-27 20:50:06.380000
quote:

ORIGINAL: unconnected2

Собственно проблема, из-за которой возник вопрос. Когда я подключаюсь сам к себе(введя свой IP в качестве адреса клиента, или LocalHost в качестве хоста), то передача файла проходит нормально. Когда же тестирую с другим компьютером(удалённым, через интернет), то сообщения доходят нормально, а вот файлы не передаются.. Может ли такое быть?


что такое "сообщения" и что такое "файлы"? в контексте обсуждения эти слова не имеют смысла

и да, телепаты в отпуске. лично я не понял вообще ни хрена
Post #: 11
RE: Вопрос, асинхронные сокеты, Delphi - 2009-02-25 16:48:27.376666   
unconnected2

Сообщений: 332
Оценки: 0
Присоединился: 2009-01-16 17:56:12.400000
В принципе, и то и то - пакеты, но одни доходят через интернет, другие - нет.. Вот и вопрос, почему так
Post #: 12
RE: Вопрос, асинхронные сокеты, Delphi - 2009-02-25 17:06:28.940000   
Denaturat

Сообщений: 1741
Оценки: 453
Присоединился: 2008-10-27 20:50:06.380000
quote:

ORIGINAL: unconnected2

В принципе, и то и то - пакеты, но одни доходят через интернет, другие - нет.. Вот и вопрос, почему так


ну я ж не знаю, как ты их посылаешь :) а ты никак об этом ничего не скажешь

вообще по отправке файлов мой тебе совет - FTP, и ставь обработчики на каждый чих (установка соединения, передача n байт, приём n байт, разрыв соединения, timeout, etc). сообщения (если имеются в виду небольшие текстовые сообщения) можно и по UDP, и без всего этого функционала

чтобы отслеживать ошибки вроде тех что у тебя возникают, нужна детальная трассировка процесса передачи данных. без трейсов - даже с кодом - что-то посоветовать тебе очень сложно
Post #: 13
RE: Вопрос, асинхронные сокеты, Delphi - 2009-02-26 14:38:59.646666   
unconnected2

Сообщений: 332
Оценки: 0
Присоединился: 2009-01-16 17:56:12.400000
Путём долгих тестов выяснилось, что виноват, как ни странно, KIS7. Если он отключен, то файлы доходят. Объяснения я не вижу для этого явления, но, главное, работает:)
Post #: 14
RE: Вопрос, асинхронные сокеты, Delphi - 2009-02-26 22:05:13.986666   
unconnected2

Сообщений: 332
Оценки: 0
Присоединился: 2009-01-16 17:56:12.400000
Ещё одна небольшая неясность для меня. У TServerSocket есть свойство ActiveConnections. К подключениям можно обращаться как TServersocket1.Socket.activeConnection[1].sendtext('!');. Так вот, допустим, к серверу подключился клиент, потом ещё один и ещё один. Потом первый клиент отключился и опять подключился. Каким по счёту он будет в ActiveConnections?
Post #: 15
RE: Вопрос, асинхронные сокеты, Delphi - 2009-02-26 22:51:20.010000   
Denaturat

Сообщений: 1741
Оценки: 453
Присоединился: 2008-10-27 20:50:06.380000
quote:

ORIGINAL: unconnected2

Ещё одна небольшая неясность для меня. У TServerSocket есть свойство ActiveConnections. К подключениям можно обращаться как TServersocket1.Socket.activeConnection[1].sendtext('!');. Так вот, допустим, к серверу подключился клиент, потом ещё один и ещё один. Потом первый клиент отключился и опять подключился. Каким по счёту он будет в ActiveConnections?


RTFM к TServerSocket, ибо зависит это исключительно от его реализации
Post #: 16
Страниц:  [1]
Все форумы >> [Компилируемые языки] >> Вопрос, асинхронные сокеты, Delphi







Связаться:
Вопросы по сайту / xakep@glc.ru

Предупреждение: использование полученных знаний в противозаконных целях преследуется по закону.