Вопрос, асинхронные сокеты, Delphi
Пользователи, просматривающие топик: none
|
Зашли как: Guest
|
Имя |
Сообщение |
<< Старые топики Новые топики >> |
|
|
Вопрос, асинхронные сокеты, Delphi - 2009-02-24 22:34:56.906666
|
|
|
unconnected2
Сообщений: 332
Оценки: 0
Присоединился: 2009-01-16 17:56:12.400000
|
Вопрос. В проге используются TServerSocket и TClientSocket, связь двух географически удалённых клиентов через сервер. Передаётся файл, через Socket.SendStream. На время передачи прога, естесственно, зависает. Я решил вынести передачу в отдельный поток. Но при этом передавать другие пакеты(сообщения отправлять, например) через сокет нельзя, так ведь?
|
|
|
RE: Вопрос, асинхронные сокеты, Delphi - 2009-02-25 00:36:39.966666
|
|
|
_SaZ_
Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
|
Нет, нельзя. Если тебе нужно делать одновременную отправку - создай 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 Я решил вынести передачу в отдельный поток. Но при этом передавать другие пакеты(сообщения отправлять, например) через сокет нельзя, так ведь? можно. открываешь соединение на другом порту и отправляешь что угодно
|
|
|
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_ Но если грамотно продумать свой формат передачи данных, то можно крепить какой-нить флажок к пакету, который указывает, что именно передаётся: основная информация или "сообщения". можно и проще на самом деле, но не в этом суть
|
|
|
RE: Вопрос, асинхронные сокеты, Delphi - 2009-02-25 02:18:34.836666
|
|
|
_SaZ_
Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
|
Ну это самый примитивный вариант =)
|
|
|
RE: Вопрос, асинхронные сокеты, Delphi - 2009-02-25 12:13:15.383333
|
|
|
unconnected2
Сообщений: 332
Оценки: 0
Присоединился: 2009-01-16 17:56:12.400000
|
Насчёт создать новое подключение.. На одном компьютере разрешается одно использование сокетов, разве не так? Или если поменять порт, то можно? Denaturat, я понимаю, конечно, что ты много знаешь и тебе хочется со всеми поделиться, но.. можешь отвечать по существу а не расчленять мои посты?
|
|
|
RE: Вопрос, асинхронные сокеты, Delphi - 2009-02-25 13:23:14.073333
|
|
|
_SaZ_
Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
|
Он то как раз по существу ответил. А вот ты явно не понимаешь, что такое сокет, адрес, порт и пр. Даже в терминах не разбираешься. Когда человек спрашивает "разве не так?" - значит он где-то это видел. Вот и поделился бы с нами источником своих глубочайших знаний. "разрешается одно использование сокетов" - даже не фраза, а просто хаотичный набор слов. Что ты этим хотел сказать?
|
|
|
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."
|
|
|
RE: Вопрос, асинхронные сокеты, Delphi - 2009-02-25 13:32:49.196666
|
|
|
unconnected2
Сообщений: 332
Оценки: 0
Присоединился: 2009-01-16 17:56:12.400000
|
Про одно использование сокетов я спросил потому, что когда дважды пытаешься открыть сервер на одном порту, вываливается ошибка с содержанием "Разрешено только одно использование…"..
|
|
|
RE: Вопрос, асинхронные сокеты, Delphi - 2009-02-25 16:20:03.270000
|
|
|
unconnected2
Сообщений: 332
Оценки: 0
Присоединился: 2009-01-16 17:56:12.400000
|
Собственно проблема, из-за которой возник вопрос. Когда я подключаюсь сам к себе(введя свой IP в качестве адреса клиента, или LocalHost в качестве хоста), то передача файла проходит нормально. Когда же тестирую с другим компьютером(удалённым, через интернет), то сообщения доходят нормально, а вот файлы не передаются.. Может ли такое быть?
|
|
|
RE: Вопрос, асинхронные сокеты, Delphi - 2009-02-25 16:33:32.016666
|
|
|
Denaturat
Сообщений: 1741
Оценки: 453
Присоединился: 2008-10-27 20:50:06.380000
|
quote:
ORIGINAL: unconnected2 Собственно проблема, из-за которой возник вопрос. Когда я подключаюсь сам к себе(введя свой IP в качестве адреса клиента, или LocalHost в качестве хоста), то передача файла проходит нормально. Когда же тестирую с другим компьютером(удалённым, через интернет), то сообщения доходят нормально, а вот файлы не передаются.. Может ли такое быть? что такое "сообщения" и что такое "файлы"? в контексте обсуждения эти слова не имеют смысла и да, телепаты в отпуске. лично я не понял вообще ни хрена
|
|
|
RE: Вопрос, асинхронные сокеты, Delphi - 2009-02-25 16:48:27.376666
|
|
|
unconnected2
Сообщений: 332
Оценки: 0
Присоединился: 2009-01-16 17:56:12.400000
|
В принципе, и то и то - пакеты, но одни доходят через интернет, другие - нет.. Вот и вопрос, почему так
|
|
|
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, и без всего этого функционала чтобы отслеживать ошибки вроде тех что у тебя возникают, нужна детальная трассировка процесса передачи данных. без трейсов - даже с кодом - что-то посоветовать тебе очень сложно
|
|
|
RE: Вопрос, асинхронные сокеты, Delphi - 2009-02-26 14:38:59.646666
|
|
|
unconnected2
Сообщений: 332
Оценки: 0
Присоединился: 2009-01-16 17:56:12.400000
|
Путём долгих тестов выяснилось, что виноват, как ни странно, KIS7. Если он отключен, то файлы доходят. Объяснения я не вижу для этого явления, но, главное, работает:)
|
|
|
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?
|
|
|
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, ибо зависит это исключительно от его реализации
|
|
|
|
|