Сейчас на форуме: rmn, Magister Yoda, vasilevradislav, tyns777, zombi-vadim (+3 невидимых) |
eXeL@B —› Программирование —› Threads in Java |
Посл.ответ | Сообщение |
|
Создано: 14 мая 2008 16:36 · Личное сообщение · #1 Привет всем. Пишу многопоточный прокси-сервер на Java. Вроде бы все нормально работает. Но иногда при открытии странички запрос уходит совершенно не на тот сайт. В результате либо 404 Not Found, либо еще хуже. У меня в программе три потока. Первый - MainThread - слушает подключения и при подключении клиента создает поток ClientThread, который принимает запросы от клиента и перенаправляет их серверу, главный же поток дальше слушает... ClientThread создает поток ServerThread, который читает с сервера ответы и перенаправляет их клиенту. В принципе обычная асинхронная схема. Но откуда растут ноги у бага, я уже замучился искать. Например, если зайти на сайт www.miranda-im.org, затем в раздел Downloads и выбрать Alternate downloads, и далее попытаться скачать файл уже с sourceforge.net, то нифига не скачается. Без прокси все отлично. Может быть я что-то не так делаю? ))))) 497e_14.05.2008_CRACKLAB.rU.tgz - proxy.java ----- MicroSoft? Is it some kind of a toilet paper? |
|
Создано: 14 мая 2008 17:13 · Поправил: arnix · Личное сообщение · #2 Первое что бросилось в глаза это: while((bytesRead = streamFromServer.read(buf)) != -1) А ты уверен что буффер у тебя достаточно большой? Попробуй так: while((bytesRead = streamFromServer.read(buf, 0, 4096)) != -1) Добавлено: нет ( The read(b) method for class InputStream has the same effect as: read(b, 0, b.length) Оказывается Java умная |
|
Создано: 14 мая 2008 17:31 · Личное сообщение · #3 |
|
Создано: 14 мая 2008 17:41 · Личное сообщение · #4 |
|
Создано: 14 мая 2008 17:51 · Личное сообщение · #5 |
|
Создано: 14 мая 2008 18:03 · Личное сообщение · #6 |
|
Создано: 14 мая 2008 20:00 · Личное сообщение · #7 Tim пишет: Я сначала грешил на dns resolve в Java. написал метод, который резолвил доменное имя в ip-адрес используя системную команду ping (вырезает из квадратных скобок адрес) ))) но, оказалось, не в этом проблема гагага, InetAddress.getByName("cracklab.ru") заменить пингом? Tim пишет: Чем вообще отлаживать Java-приложения? )) Eclipse или другая IDE |
|
Создано: 14 мая 2008 22:31 · Личное сообщение · #8 Вот версия с выводом exception'ов и небольшим количеством логов. Запускать так: java Proxy 8080 127.0.0.1 -verbose 6b0c_14.05.2008_CRACKLAB.rU.tgz - proxy.java ----- MicroSoft? Is it some kind of a toilet paper? |
|
Создано: 14 мая 2008 22:36 · Личное сообщение · #9 Сейчас заметил интересную вещь! Если через прокси открыть ЭТУ страницу, и потом выйти в список форумов, то для этой страницы напишет Connection from, а для списка форумов - не напишет... Получается он по тому же открытому сокету ломится... Как это вообще возможно? ----- MicroSoft? Is it some kind of a toilet paper? |
|
Создано: 14 мая 2008 23:04 · Личное сообщение · #10 До меня дошло! Браузер за один сеанс связи с прокси-сервером может посылать несколько запросов, причем на разные хосты. Отсюда и ругательство серверов. Я вот сейчас думаю, что лучше сделать - проверять в запросе поле Content-Length и читать исходя из этого, и потом закрывать соединение, либо реализовать несколько запросов за сеанс... Посмотрел на свой топик, прикололся - отвечал себе сам ) Наверное поэтому многие люди ведут блоги... Думается легче )))) ----- MicroSoft? Is it some kind of a toilet paper? |
|
Создано: 15 мая 2008 00:55 · Личное сообщение · #11 |
|
Создано: 18 мая 2008 17:04 · Личное сообщение · #12 В общем, нужна снова помощь Дописал я свой прокси до более менее законченного вида. Научил keep-alive соединениям, pipelining'у. Все замечательно работает ))) Но почему-то, иногда браузер как бы подвисает на 100% при открытии страницы. Это касается только keep-alive соединений. С close все просто отлично. Например, если зайти на страницу gismeteo.ru, и там открыть прогноз, и пообновлять, может получиться так, что страница не догрузится... индикатор загрузки на 100% замрет. В Firefox так... и в IE так же. Кто-нибудь, гляньте, а то замучился уже искать баг ) 57ca_18.05.2008_CRACKLAB.rU.tgz - proxy.java ----- MicroSoft? Is it some kind of a toilet paper? |
|
Создано: 19 мая 2008 19:52 · Личное сообщение · #13 |
eXeL@B —› Программирование —› Threads in Java |