Получение данных из грязи с сокетами - телнет переговоров? - PullRequest
0 голосов
/ 08 января 2012

Для небольшого контекста, во-первых, чтобы облегчить понимание вопроса: у меня хорошее понимание сетей Java, но все сети, которые я делал до этого момента, отправляли команду-> ждать ответа-> повторить.Недавно в свободное время я пробовал кое-что другое.Я хотел бы подключиться к грязи, и я использую стандартный клиент грязи.Однако я подумал и решил, что смогу создать сервер, который затем подключится к грязи (поэтому я использую свой клиент для подключения к промежуточному серверу, который затем подключится к собственно грязи).,В основном это было только для того, чтобы посмотреть, смогу ли я сначала (несколько друзей и я хотел настроить сторонний игровой чат и т. Д.), Но я столкнулся с несколькими проблемами и теперь хочу решить их для дальнейшего использования, поскольку они кажутся довольноважно.

До сих пор я настраивал ServerSocket, принимал соединение с клиентом, генерировал BufferedReaders / PrintWriters для хранения потоков ввода и вывода (внутри потока для каждого нового соединения).Затем я создаю второй поток внутри этого клиентского потока для подключения к грязи, которая затем постоянно зацикливает чтение строк и выводит их в выходной поток клиентского потока.Клиентский поток зацикливается на ожидании ввода команды и обрабатывает ее.

Я не уверен, подходит ли этот подход (как я уже говорил, я никогда не занимался программированием сокетов, где ввод и вывод обрабатывались вв то же время).Основная проблема в том, что вывод просто останавливается через несколько строк.Сервер подключается к серверу «грязь» и печатает около 12 строк экрана входа в систему (я могу уточнить это число, если его важный двойной интервал делает его сомнительным).Я оглянулся и упомянул несколько других вопросов в других вопросах, касающихся необходимости отправки последовательности байтов (согласование telnet? Я не знаком с этим термином), чтобы избежать подобных проблем, но я не смог найти много конкретной информации о проблеме.

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

1 Ответ

0 голосов
/ 10 декабря 2017

Если я правильно понимаю, вы используете стандартный клиент MUD для подключения к MUD через посреднический / прокси-сервер, который вы написали.

И снова, чтобы убедиться, что я на одной странице: каждое соединение с вашим прокси-сервером порождает два потока: один, который собирает байты, отправленные клиентом, и перенаправляет их в MUD, а другой, который собирает байты, отправленные MUD. и пересылает их клиенту.

Ваша проблема:

Ваш клиент видит только ограниченное количество байтов из MUD.

Теория:

Ваша теория Telnet-Negotiation является достойной. Вам необходимо отправлять незапрещенные октеты между Клиентом и MUD, но PrintWriter предназначен для отправки только обработанных закодированных текстовых потоков. Это может привести к зашифровке некоторых байтов, не относящихся к ASCII, которые перемещаются назад и вперед через ваш прокси.

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

...