Сетевое программирование в JAVA

В самом языке программирования Java очень мало возможностей для написания программ работающих в сети. Однако для этого есть классы и интерфейсы определённые в пакете java.net.

Вот список основных классов определённых в java.net :
  • Authenticator (Java2)
  • ContentHandler
  • DatagramPacket
  • DatagramSocket
  • DatagramSocketImpl
  • HttpURLConnection
  • InetAddress
  • InetSocketAddress 
  • JarURLConnection (Java2)
  • MulticastSocket
  • NetPermission
  • PasswordAuthentication (Java2)
  • Server-Socket
  • Socket
  • SocketImpl
  • SocketPermission
  • URL
  • URLClassLoader (Java2)
  • URLConnection
  • URLDecoder (Java2)
  • URLEncoder
  • URLStreamHandler
Там где в скобках обозначенно Java2 означает, что это классы добавленные в пакет java.net во второй версии Java, т.е в Java2.

А вот список интерфейсов определённых в пакете java.net :
  • ContentHandlerFactory
  • FileNameMap
  • SocketImplFactory
  • SocketOptions
  • URLStreamHandlerFactory.
Далее я буду по одному описывать каждый класс и интерфейс и покажу как их использовать.


Шифр Цезаря

Шифр Цезаря — один из древнейших шифров. При шифровании каждый символ заменяется другим, отстоящим от него в алфавите на фиксированное число позиций. Шифр Цезаря можно классифицировать как шифр подстановки, при более узкой классификации — шифр простой замены.


Шифр назван в честь римского императора Гая Юлия Цезаря, использовавшего его для секретной переписки. Естественным развитием шифра Цезаря стал шифр Виженера. С точки зрения современного криптоанализа, шифр Цезаря не имеет приемлемой стойкости.


 Вот мой вариант реализации на С++:

#define SIZE 26

const char low_char[] = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l',
'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'};

const char high_char[] = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L',
'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'};

//
// Crypt algorithm
//
std::string crypt(std::string &InputString, int key){
bool OK;
std::string OutputString;
for(unsigned i=0; i OK=false;
for(int j=0; j if (InputString[i] == low_char[j]){
j += key;
while (j >= SIZE) j -= SIZE;
while (j < 0) j += SIZE;
OutputString += low_char[j];
OK=true;
break;
}
if (InputString[i] == high_char[j]) {
j += key;
while (j >= SIZE) j -= SIZE;
while (j < 0) j += SIZE;
OutputString += high_char[j];
OK=true;
break;
}
}
if(!OK)
OutputString +=InputString[i];
}
return OutputString;
}

//
// Decrypt algorithm
//
std::string decrypt(std::string &InputString, int key){
bool OK;
std::string OutputString;
for(unsigned i=0; i OK=false;
for(int j=0; j if (InputString[i] == low_char[j]){
j -= key;
while (j >= SIZE) j -= SIZE;
while (j < 0) j += SIZE;
OutputString += low_char[j];
OK=true;
break;
}
if (InputString[i] == high_char[j]) {
j -= key;
while (j >= SIZE) j -= SIZE;
while (j < 0) j += SIZE;
OutputString += high_char[j];
OK=true;
break;
}
}
if(!OK)
OutputString +=InputString[i];
}
return OutputString;
}

Исчезает консольное окно

Проблема многих новичков:  после компиляции исходного кода и запуска консольного  приложения результат выводившийся на экран невиден.  Говоря иными словами программа выполняется и сразу закрывается. Это потому что компилятор запущен в графическом режиме и на время выполнения программы вызывается консоль, а после завершения программы закрывается. Но если скомпилированную программу запустить через консоль, как это обычно делается, то результат никуда не исчезнет. Но чтобы не залезать каждый раз в консоль можно применять приёмы. Вот три способа :

_getch();   // надо подключить conio.h
system(“pause”);   // надо подключить stdlib.h
cout<<endl;  // надо подключить iostream и пространство имён std

Компьютерный сленг

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

Админ - администратор.
Аська - прграмма общения ICQ.
Апгрейдить - улучшить что-либо. Сделать Апгрейд.
Батон - клавиша на клавиатуре. Отсюда выражение "топтать батоны."
Баг - ошибка в программе.
Белая сборка - компьютер, собранный на территории Европы или Северной Америки, то есть качественный компьютер.
Бета-тестер - человек, на котором испытывают новую программу для того, чтобы выявить ошибки и узнать мнение пользователя.
Брякпойнт - точка прерывания, то есть место, где может быть прервано выполнение программы.
Бэд-сектор - некачественный поврежденный сектор, куда нельзя записать информацию.
Винда - OS Windows.
Вир, Вирь - компьютерный вирус.
Вирмэйкер - человек, создающий вирусы.
Всосать - принять полностью что-либо по модему.
Вырубить - выключить.
Варез - нелицензионная программа (от англ. Warez).
Винт - винчестер, жесткий диск.
Видюха - видеокарта.
Висельник - системный программист.
Вес - размер файла, папки, программы.
Гестбук - гостевая книга (от англ. Guestbook).
Глюк - сбой в программе.
Глючить - работать со сбоями.
Глюкало - удобная программа, имеющая красивый внешний вид и развернутую панель с прекрасными кнопочками, но ничего полезного не делающая. Дерьмо, одним словом.
Гиг, Гига - гигабайт (примерно миллиард байтов).
Глюкодром - сбойное аппаратное обеспечение.
Дедик - выделенный сервер (dedicate).
Дельфин - язык программирования Borland Delphi.
Дельфинист - программист на Borland Delphi.
Док, Дока - документация.
Доска - клавиатура.
Домен - членораздельный адрес в интернете. Например www.narod.ru. Здесь ".ru" - домен 1-го уровня, ".narod" - домен 2-го уровня, "www" - домен 3-го уровня.
Директория - папка (directory).
Дебаггер, Долбаггер - программа для поиска, исправления глюков, а так же для взлома.
Дрова - драйвер.
Жертва - компьютер в руках у чайника.
Железо - материнская, звуковая и прочие платы. "Начинка" компьютера.
Живность - вирусы.
ЗЫ - буквы "З" и "Ы" расположены на клаве там же, где латинские "P" и "S", то есть PS.
Захачить - взламывать, переделывать прогу.
Зверь - вирус.
Зухель - модем фирмы Zyxel.
Интерпретатор, Интертрепатор - программа, выполняющая определенные действия на команды, записанные в текстовом файле.
Исходники - исходные тексты прграмм, для некоторых - исходящая почта.
Инет - интернет.
Клава - клавиатура, Клавка.
Коннект - связь с интернетом.
Комп - компьютер.
Кебарда, Кеборда - клавиатура.
Клацнуть педалью - нажать на клавишу Кебарды.
Компилятор - программа, переводящая текстовые файлы в двоичные исполняемые.
Компильнуть - провести компиляцию.
Крэк - программа взломщик.
Ламер - чайник, возомнивший себя крутым.
Лист - список рассылки, используется для оповещения широких масс одним простым письмом (от англ. Mailing List).
Левый - купленный у черта на рогах, без гарантии.
Лич - выкачивание файлов.
Личер - человек, который подсел с потрохами на скачивание варезов. Такие люди могут с легкостью заработать Клизму.
Ломиться в сеть - настойчиво дозваниваться до провайдера.
Лузер - юзер, дела которого оставляют желать лучшего. Дай такому человеку комп - он его по четырем задницам пустит.
Ляп - сбой, баг.
Мессага - сообщение, письмо (от англ. Message).
Мыло - e-mail, адрес электронной почты, почтовый ящик.
Метр - мегабайт.
Мазерборд - мать.
Маздай - OS Windows (от англ. "Must Die!" - должен умереть).
Мелкософт - фирма Microsoft.
Набить текст - создать текстовый файл.
Обои - бэкграунд, фоновый рисунок на рабочем столе.
ОЗУ - Оперативное Запоминающее Устройство, озушка, оперативная память.
Окна - винды.
Ось, Оса - операционная система OS/2.
Отлаживать - приводить программу в рабочее состояние.
Отпачить - исправить.
Отформатировать - разметить диск.
Оффтопик - брякнуть что-то мимо кассы.
Пень - Pentium.
Прога - программа.
Пассворд - пароль.
Повиснуть - зависнуть.
Полуось - OS/2.
Полетел - испортился.
Порезать диск - разделить физический диск на несколько логических.
Портабильный - переносной компьютер.
Похерить - сделать ксерокопию.
Поюзанный - бывший в употреблении
Пофиксить баги - исправить ошибки.
Приаттачить - присоединить файл к письму.
Привинтить - установить что-нибудь на компьютер.
Прикрутить - привинтить.
Проц - процессор.
Релиз - окончательная версия программы.
Ругается - выдает сообщения. Вроде ничего такого не говорит, а злит как х... моржовый! Имеются в виду сообщения об ошибках.
Русь'инфицировать - перевести на русский язык, русифицировать.
Сдохнуть - прекратить работать.
Спам - непрошенная рекламная почта.
Сервак - сервер.
Слить - скачать файло с сервака.
Сбросить на диск - переписать на носитель информацию.
Сетка - сеть Internet.
Сисадмин - системный администратор.
Слот - разъем для контроллеров.
Смайлик - динамичный рисунок, совершенно бесполезный, кстати.
Софт - прога.
Сорец - исходник.
Тоссировать - готовить почту к отправке.
Тулза - утилита.
Тюкнуть файл - удалить файл.
Убить - удалить файл.
Унитаз - виндовозная Корзина.
Упал - сервер, прекративший отвечать на запросы пользователей.
Утоптать - заархивировать.
Флудить - порождать бессмысленные потоки информации. Например, в ЧАТах, если повторяете одну и ту же фразу несколько раз. Обычно это слегка бесит. Забава для безголовых ламеров.
Флоп, Флоповод - дисковод.
Фонт - шрифт.
Фиксить - исправлять ошибки.
Форточки - OS Windows.
FAQ - ответы на часто задаваемые вопросы (от англ. Frequently Asked Questions).
Хакер - взломщик, преступник. Обычно с хорошими знаниями и соответствующим оборудованием
Хачить - взламывать, портить людям жизнь, заниматься хакерством
Хак - взломанная прога.
Халява - Freeware.
Хард - винчестер.
ЧАВО - обрусевший FAQ.
Чайник - 1. Человек, ничего не понимающий в компах. 2. Металлическая посуда с вытянутым горлышком и чрезвычайно удобной ручкой. Служит для повышения температуры воды в связи с ее нагреванием.
Чатить - безвылазно тусоваться в ЧАТах.
Шаровары - программы ShareWare.
Шуршать - искать что-либо на дисках.
Эвент - событие.
Экзешник - файл с расширением .ехе.
Юзер, Юзверь, Юзверг - пользователь, user.
Юниксоид - пользователь операционной системы Unix.
Юзать - пользоваться.
Яха - компьютер Yamaha.

Задача: Интересное число

Для заданного числа    N  найти наименьшее положительное число с суммой цифр равной  N, которое делится на  N.

Входные данные

Входные данные состоят из нескольких тестов. Для каждого теста в одной строке  записано одно число  N (1< N<109). Тесты заканчиваются строкой с единственным числом  0.

Выходные данные

В каждой строке выходных данных содержится единственное искомое число. Выходные данные заканчиваются строкой с числом 0.

Вот и решение:

#include "stdafx.h"
#include
using namespace std;

#define SIZE 1000000000
#define SIZE1 1000000000000000


int _tmain(int argc, _TCHAR* argv[])
{
    unsigned long long N,i,b[20],summa,a[20];
    bool sss=false;
    int j,k;
    while (1) 
   {
       cout<<"Vvedite chislo: ";
       cin>>N;

       if (N==0) 
         exit(1);
       else
          if (N>1 && N
          {
                   
               for (i=N; i<=SIZE1 ;i++) 
              {
                          
                   if (i%N==0) 
                  {
                      summa=0;
                      b[0]=i;
                      for (j=0; j<=15. ; j++) 
                      {
                           a[j]=b[j] % 10;
                           b[j+1]=b[j] / 10;
                           if (b[j+1]==0) 
                           {
                               for (k=0; k<=j ;k++) 
                                               {
                                                      summa=summa+a[k];
                                               }
                                               if (summa==N) 
                                                      sss=true;
                                               else
                                                      sss=false;
                                        break;
                                        }
                                  }
                           }

                           if (sss)
                           {     
                                  cout<'\n';
                                  break;
                           }
                    }
            
             }
             else
                    cout<<"\nVvedite chislo bolshe 1 i menshe 1000000000.\nEsli vvedete 0 proqramma zavershitsa!\n\n";
       }
       return 0;
}