Интернет Програмиране - Основи
- Теория
- Код
Основи на Мрежовото Програмиране: Преглед на TCP/IP, Протоколи и Технологии
TCP/IP Протоколи
TCP/IP е основният комуникационен протокол в Интернет, разделяйки се на два основни компонента:
- TCP (Transmission Control Protocol): Гарантира доставянето на пакети от източника до крайната дестинация, осигурявайки надеждност и последователност.
- IP (Internet Protocol): Отговаря за маршрутизацията на пакетите, като използва уникални IP адреси за идентификация на устройства в мрежата.
OSI Модел
OSI (Open Systems Interconnection) моделът е концептуална рамка, която се използва за разбиране и проектиране на мрежови системи. Той се състои от седем слоя:
- Физически Слой: Управлява преноса на сурови битове по физическата среда.
- Data Link Слой: Отговаря за мрежовата комуникация и корекция на грешки на физическия слой.
- Мрежови Слой: Маршрутизира пакети, включително IP адресация и маршрутизация.
- Транспортен Слой: Управлява край-до-край доставката на данни (TCP, UDP).
- Сесиен Слой: Управлява сесии между комуникиращи се устройства.
- Презентационен Слой: Конвертира данните във формат, който приложният слой може да използва.
- Приложен Слой: Интерфейсът между мрежовата услуга и крайния потребител.
Други Важни Протоколи и Технологии
- HTTP (Hypertext Transfer Protocol): Ос новен протокол за трансфер на данни в World Wide Web.
- HTTPS (HTTP Secure): Версия на HTTP с добавено криптиране чрез SSL/TLS.
- SSL/TLS (Secure Sockets Layer / Transport Layer Security): Протоколи за криптиране на мрежови комуникации.
- WebSocket: Технология, която осигурява двупосочна комуникация по една единствена TCP връзка.
- FTP (File Transfer Protocol): Протокол за трансфер на файлове между клиент и сървър.
- SSH (Secure Shell): Протокол за сигурен достъп до отдалечени системи.
Примерен Java Код за Създаване на TCP Сървър и Клиент
TCP Сървър
import java.io.IOException;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
public class ServerDemo {
public static void main(String[] args) throws IOException {
// Създаване на ServerSocket на порт 1211
ServerSocket server = new ServerSocket(1211);
// Сървърът "слуша" за входящи връзки
Socket socket = server.accept();
// Създаване на Scanner обект за четене на данни от клиента
Scanner scan = new Scanner(socket.getInputStream());
// Прочитане на числото, изпратено от клиента
int number = scan.nextInt();
// Изпращане на отговор обратно към клиента
PrintStream printout = new PrintStream(socket.getOutputStream());
printout.println((number % 2 == 0) ? "Your number is even" : "Your number is odd");
// Затваряне на сървъра
server.close();
}
}
TCP Клиент
import java.io.IOException;
import java.io.PrintStream;
import java.net.Socket;
import java.util.InputMismatchException;
import java.util.Scanner;
public class ClientDemo {
public static void main(String args[]) throws IOException {
// Създаване на сокет към сървъра
Socket s = new Socket("127.0.0.1", 1211);
// Създаване на Scanner за четене от конзолата
Scanner scan = new Scanner(System.in);
// Създаване на Scanner за четене на отговор от сървъра
Scanner scan2 = new Scanner(s.getInputStream());
// Изпращане на число към сървъра
PrintStream printout = new PrintStream(s.getOutputStream());
System.out.println("Enter some value:");
try {
int number = scan.nextInt();
printout.println(number);
// Четене на отговора от сървъра и извеждане на конзолата
String input = scan2.nextLine();
System.out.println(input);
} catch (InputMismatchException e) {
System.out.println("Enter a correct value");
} finally {
// Затваряне на ресурсите
if (s != null) s.close();
if (scan != null) scan.close();
if (scan2 != null) scan2.close();
}
}
}
В тези примери, сървърът приема число от клиента, проверява дали е четно или нечетно и изпраща отговор обратно. Клиентът изпраща числото и чака отговор от сървъра.