Модераторы: LSD, AntonSaburov

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Прокси сервер на JAVA, ПРОБЛЕМЫ? Помогите пожалуйста. 
:(
    Опции темы
Chel
  Дата 17.8.2006, 15:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 17.8.2006

Репутация: нет
Всего: нет



У меня есть какой то процент, вероятность сбоя.
Я генерирую число, беру его и проверяю его с
моим процентом. Если число больше процента то 
у меня в браузере выходит ошибка. 
Проблема моя:  smile 
Код
for(int i=0;i<n;i++)
{   
     int RN1 = RandomNumber1();
     int RN2 = RandomNumber2();
     client = ss.accept();
     connection cc = new connection(client,i,host,remoteport,RandomNumberGeneration,per,per3,ss,RN1,RN2);
}

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

Заранее спасобо, ВСЕМ..... smile  smile  smile 
PM MAIL   Вверх
LSD
Дата 17.8.2006, 15:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 19
Всего: 538



Ничего не понятно. Выкладывай код.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Chel
Дата 17.8.2006, 15:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 17.8.2006

Репутация: нет
Всего: нет



Код

import java.awt.*;
import java.awt.List;
import java.io.*;
import java.net.*;
import java.util.*;
import java.util.Timer;
import java.lang.*;
import javax.swing.*;

public class server extends Panel
{
    //function which generate the random number between a(min) and b(max)
    public static int RNG(int a,int b){
        int k;
        boolean error1 = false;
        //we check. if our max will be smaller than min or equal then we have error
        //our return value will be negative or 0 and in the main function our programm
        //will not work...
        if(a<=b){
            
            System.err.println("Your max must be bigger min...");
            error1 = true;
            return a-b;    
        }
        else{
        //if max is bigger then min it will be work and generate random number.    
            k = (int) ((a-b)*Math.random()+b);
            
            //or we can write like this. it is similar with code which is written above    
            
            //Random random = new Random();
            //k = random.nextInt(a-b) + b;
            
            return k;
        }
        
    }

    public static int RandomNumber1(){
        int r;
        //random numbers
        Random random = new Random();
        r = random.nextInt(100);
        System.out.println("RandomNumber1:"+r);
        return r;
        }
    public static int RandomNumber2(){
        int r1;
        //random numbers
        Random random = new Random();
        r1 = (int) (100*Math.random());
        System.out.println("RandomNumber2:"+r1);
        return r1;
    }
    public static void main(String args[])throws Exception 
    {
        
        
        // Create a socket object from the ServerSocket to listen and accept 
        // connections.
        try 
        {        
                Socket client = null;
                int n = 100;
                int NUM_OF_INTEGERS = 1000;
                //read and then buffered from file...
                FileReader file = new FileReader("in.txt");
                BufferedReader fileInput = new BufferedReader(file);
         
                //we construct the array, which can inckude 1000 int
                ArrayList nums = new ArrayList(NUM_OF_INTEGERS);
                
                String line = null;
                while ((line = fileInput.readLine()) != null) {
                    nums.add(line);
                }
                // Close file
                fileInput.close();
                // construct an array of strings
                String[] numbers = new String[nums.size()];
                // populate that array
                nums.toArray(numbers);
                
                //we save all everything from file to some string variables
                //each line in the file have own value
                 
                String remoteport1 = numbers[0]; //first line in in.txt is remoteport
                String localport1 = numbers[1];  //second line in in.txt is localport
                String host = numbers[2];        //third line in in.txt is host
                String min1 = numbers[3];        //fourth line in in.txt is minimum number
                String max1 = numbers[4];        //fifth line in in.txt is maximum number
                String per1 = numbers[5];        //sixth line in in.txt is percentage of disconnecting
                String per2 = numbers[6];        //sixth line in in.txt is percentage of disconnecting
                
                //we change from String to Integer some variables which must be Integer
                int remoteport = Integer.parseInt(remoteport1);
                int localport = Integer.parseInt(localport1);
                int min = Integer.parseInt(min1);
                int max = Integer.parseInt(max1);
                int per = Integer.parseInt(per1);
                int per3 = Integer.parseInt(per2);
                boolean error = false;
                 
            //function which generate random number
            int RandomNumberGeneration = RNG(max,min); 
            
            if( localport <= 0 || host==null || remoteport <= 0 || RandomNumberGeneration<0)
              {
                  System.err.println("Error: Invalid Specification ");
               System.err.print("Port value out of range (negative or null)");
               System.err.println("or maximum number smaller then minimum");
                  error = true;
              }    
              else {
            System.out.println("Starting proxy for " + host + ":" + remoteport + " on port " + localport);}
            
            System.out.println("Time delay is (random number) :" + RandomNumberGeneration);
            
            ServerSocket ss = new ServerSocket(localport);
                //connection with proxy server    
                
            for(int i=0;i<n;i++)
                {   
                    int RN1 = RandomNumber1();
                    int RN2 = RandomNumber2();
                    client = ss.accept();
                    //go to connection function
                    connection cc = new connection(client,i,host,remoteport,RandomNumberGeneration,per,per3,ss,RN1,RN2);
                }            
        }
        catch (Exception e) 
        {
            
            System.err.println(e);
        }
    }
}

class connection extends Thread 
{
    Socket client=null;
    int id;
    String host;
    int remoteport;
    long ranum;
    long max;
    int percentage;
    int percentage1;
    ServerSocket ss;
    int RandomNumber1;
    int RandomNumber2;
    
    public connection(Socket s,int i, String h, int port , long a ,int per,int per1, ServerSocket o, int r, int r1) 
    { 
        id=i;
        client=s;
        host=h;
        remoteport=port;
        ranum=a;
        percentage=per;
        percentage1=per1;
        ss=o;
        RandomNumber1=r;
        RandomNumber2=r1;
        this.start(); 
    }
    
    
    public void run()
    {
        final byte[] request = new byte[1024];
        byte[] reply = new byte[4096];
        int i=0;
        
        boolean error = false;
        final int ADP = 100-percentage;
        final int ADP1 = 100-percentage1;
        System.out.println("ID:"+id);
        Socket server = null;
        try 
        {
            
            final InputStream streamFromclient = client.getInputStream();
            final OutputStream streamToclient= client.getOutputStream();
            
            if(RandomNumber1>ADP){
                streamFromclient.close();
                streamToclient.close();
                System.err.println("Error: transformation canceled");
            }
            else{
            try 
            {
                server = new Socket(host, remoteport); 
            } 
            catch (IOException e) 
            {
                PrintWriter out = new PrintWriter(new OutputStreamWriter(streamToclient));
                out.println("Proxy server cannot connect to " + host + ":" + remoteport + ":\n" + e);
                out.flush();
                client.close();
            }
            
            final InputStream streamFromserver = server.getInputStream();
            final OutputStream streamToserver = server.getOutputStream();
            
            
            TimerTask timerTask = new TimerTask()
            {
                public void run() 
                {
                    int bytes_read;
                    
                    try 
                    {
                        while((bytes_read = streamFromclient.read(request)) != -1) 
                        {
                            //request
                            streamToserver.write(request, 0, bytes_read);
                            streamToserver.flush();
                        }
                    }
                    catch (IOException e) {}
                    try {streamToserver.close();} catch (IOException e) {}
                }
            };
            Timer timer = new Timer();
            timer.schedule( timerTask, ranum );
            
            if(RandomNumber2>ADP1){
             streamToclient.close();
             streamFromclient.close();
             System.err.println("Error: Transformation canceled");
             
            }
            else{
             int bytes_read;
                 try 
                 {                
                         while((bytes_read = streamFromserver.read(reply)) != -1) 
                         {
                             //response
                             streamToclient.write(reply, 0, bytes_read);
                             streamToclient.flush();
                         }        
                 }        
            
                 catch(IOException e) {}
                 streamToclient.close();
                 }
            }
        }
        
        catch (IOException e) { System.err.println(e); }
        finally 
        { 
            try 
            { 
                if (server != null) 
                    server.close(); 
                if (client != null) 
                    client.close(); 
            }
            catch(IOException e) {}
        }
      
    }
}


Добавлено @ 15:50 
Помогите пожалуйста

Это сообщение отредактировал(а) Lamer George - 17.8.2006, 15:53
PM MAIL   Вверх
Chel
Дата 17.8.2006, 18:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 17.8.2006

Репутация: нет
Всего: нет



Люди добрые помогите плз.  smile 
PM MAIL   Вверх
powerOn
Дата 17.8.2006, 21:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


Профиль
Группа: Участник
Сообщений: 4367
Регистрация: 7.10.2005

Репутация: 2
Всего: 159



Chel, 
1) Кто, куда, как и зачем коннектится?
2) Какой обмен информацией при этом происходит между сервером и клиентом?
3) Жизненный цикл системы этой в чем заключается?

Подробнее, пожалуйста... 




--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
Chel
Дата 18.8.2006, 10:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 17.8.2006

Репутация: нет
Всего: нет



1.В начале прокси ишет клиента, находит и коннектитса. n-это id-ник соединения. n=100.
Код
for(int i=0;i<n;i++)
{   
    int RN1 = RandomNumber1();
    int RN2 = RandomNumber2();
    client = ss.accept();
    //go to connection function
    connection cc = new connection(client,i,host,remoteport,RandomNumberGeneration,per,per3,ss,RN1,RN2);
}

Клиент передаёт инфо прокси прокси ищет Remoteprot, находит делает соединение
и передаёт инфо удалённому серваку. и тот обратно клиенту.

connection with server
Код
try 
{
    server = new Socket(host, remoteport); 
} 
catch (IOException e) 
{
    PrintWriter out = new PrintWriter(new OutputStreamWriter(streamToclient));
    out.println("Proxy server cannot connect to " + host + ":" + remoteport + ":\n" + e);
    out.flush();
    client.close();
}

client-proxy-server
Код
while((bytes_read = streamFromclient.read(request)) != -1) 
{
    //request
    streamToserver.write(request, 0, bytes_read);
    streamToserver.flush();
}

Server-proxy-Client
Код
while((bytes_read = streamFromserver.read(reply)) != -1) 
{
    //response
    streamToclient.write(reply, 0, bytes_read);
    streamToclient.flush();
}
  

2. клиент у нас веб браузер.  HTTP

3.если есть коннектион значит работает если нету не.
Мне его не надо выключать, просто если типа А>Б
значит не работает и в окне не чего нету. А
в следуюший раз если А>Б не выполняется то все дальше
работает опять до А>Б

Наверное объяснил. ПОМОГИТЕ. а то я всё перепробовал.  smile 
Не идёт. smile 
PM MAIL   Вверх
Chel
Дата 18.8.2006, 12:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 17.8.2006

Репутация: нет
Всего: нет



Люди добрые и умные подскажите хотя бы как сделать, чтоб
когда клиент передавал инфо, у меня для этой передачи
генерировалось только одно число, а не несколько. Как у 
меня.  smile 
Например:
Когда я захожу на сайта www.vingrad.ru: одно число
Когда я захожу на сайта www.forum.vingrad.ru: другое, но одно...
.
.
.
.
.
..........................и т.д smile  smile  smile 
PM MAIL   Вверх
LSD
Дата 18.8.2006, 14:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 19
Всего: 538



Т.е. тебе надо для одного и того же узла получать одино и тот же число?
Если да, то делай так: inetAddress.getHostName().hashCode().


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Chel
Дата 18.8.2006, 14:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 17.8.2006

Репутация: нет
Всего: нет



Вы меня не так поняли, у меня хост,локалпорт,ремотпрот это всё есть
мне надо с генерировать число, только одно и проверить с другим числом
(Процент не соединения). Типа вот такого:

Цитата

if(RandomNumber1>ADP){
                //error
            }
            else{
            //eto vse rabotaet
            {


Рандом числа я передаю здесь
Цитата

for(int i=0;i<n;i++)
                {   
                    int RN1 = RandomNumber1();
                    int RN2 = RandomNumber2();
                    client = ss.accept();
                    //go to connection function
                    connection cc = new connection(client,i,host,remoteport,RandomNumberGeneration,per,per3,ss,RN1,RN2);
                }            

Но тут у меня проблема, у меня несколько чисел, а мне надо 
для каждого клиента одно число. Чтоб проверить его здесь: 1 Цитате.
он ошибку находит, но работает дальше   smile 

а задача у меня: у меня есть 2%(процент не соединения).
(1)когда я передаю информацию от клиента серверу у меня должна
выходить ошибка, то есть не чего не показывать в браузере,
когда информация поступает в прокси сервер от клиента,
(2) и  когда это же информация поступает уже с прокси к клиент.
в (1) у меня например 9%, а в (2) 0. или на оборот. Короче одно
из них должно быть 0.  smile 
PM MAIL   Вверх
Chel
Дата 19.8.2006, 12:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 17.8.2006

Репутация: нет
Всего: нет



нет у нас например есть браузер, когда мы например идём
на какой-нибудь сайт то в это время генерируется число 
для этого сайта, если идём после этого на другой то
генерируется другое число....и т.д. Вот что мне нужно
всё перепробовал. Помогите ПЛЗ.  smile 
PM MAIL   Вверх
powerOn
Дата 19.8.2006, 14:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


Профиль
Группа: Участник
Сообщений: 4367
Регистрация: 7.10.2005

Репутация: 2
Всего: 159



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



--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
Chel
Дата 19.8.2006, 18:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 17.8.2006

Репутация: нет
Всего: нет



Цитата

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


А не могли бы вы написать это простыми словами, а то
я что та не догоняю или показать кодам. Спасибо большое.
PM MAIL   Вверх
Chel
Дата 19.8.2006, 20:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 17.8.2006

Репутация: нет
Всего: нет



Люди кто нибудь знает как сделать, чтоб моя разпознавал
что я перехожу на другой адрес. Типа если меняется урл???
ПЛЗ помогите?  smile 
PM MAIL   Вверх
powerOn
Дата 19.8.2006, 20:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


Профиль
Группа: Участник
Сообщений: 4367
Регистрация: 7.10.2005

Репутация: 2
Всего: 159



Насколько я понял, для каждого соединения клиента с сервером Вам необходимо получить некоторое уникальное и в тоже время случайное число. Для этого:
1) Каким-то образом получаем IP адрес клиента и переводим его в строку.
2) Каким-то образом получаем IP адрес сервера и переводим его в строку.
3) Складываем полученный строки.
4) Берем хеш от полученной строки.

Код

String serverIP = getServerIP().toString();
String clientIP = getClientIP().toString();
String str = serverIP + clientIP;
int random_digit = str.hashCode();


Это сообщение отредактировал(а) MoonCat - 19.8.2006, 20:21


--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
Chel
Дата 19.8.2006, 21:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 17.8.2006

Репутация: нет
Всего: нет



2 MoonCat: Что та не получается?
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Работа с сетью | Следующая тема »


 




[ Время генерации скрипта: 0.0707 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.